我正在尝试从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,我得到运行时错误。我干了好几次。我不确定为什么会出现运行时错误。
你能告诉我我做错了什么吗?
答案 0 :(得分:0)
问题在于这一行:
even->next = curr->next;
当current设置为最后一个元素(3)时,你正在尝试curr-> next,这将导致错误。