一个特定输入的奇数偶数链接列表运行时错误。其他一切都运行良好

时间:2016-05-31 20:13:39

标签: algorithm linked-list puzzle

我正在尝试从LeetCode解决问题。

问题

给定单链表,将所有奇数节点组合在一起,然后是偶数节点。请注意,这里我们讨论的是节点编号,而不是节点中的值。

你应该尝试到位。该程序应该以O(1)空间复杂度和O(节点)时间复杂度运行。

实施例: 给定1-> 2-> 3-> 4-> 5-> NULL, 返回1-> 3-> 5-> 2-> 4-> NULL。

我的解决方案:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {

        ListNode *even, *firsteven, *odd, *curr;

        if(head == NULL)
            return NULL;

        odd = head;
        even = head;
        curr = head;

        if(head->next) {
            even = even->next;
            firsteven = head->next;
        }
        else return head;

        if(head->next->next)
            curr = head->next->next;
        else return head;

        while(curr) {
            even->next = curr->next;
            curr->next = NULL;
            odd->next = curr;
            curr->next = firsteven;
            odd = odd->next;
            even = even->next;
            even->next ? curr = even->next : curr = NULL;
        }

        return head;
    }
};

除了3号输入外,我的解决方案适用于所有输入。 对于输入1-> 2-> 3,我得到运行时错误。我干了好几次。我不确定为什么会出现运行时错误。

你能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

even->next = curr->next;

当current设置为最后一个元素(3)时,你正在尝试curr-> next,这将导致错误。