这是我的代码
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
ListNode* odd=head;
ListNode* even=odd->next;
ListNode* evenStart = even;
while(odd->next!=NULL && even->next!=NULL)
{
odd->next = even->next;
odd=odd->next;
even=odd->next;
even=even->next;
}
odd->next=evenStart;
return head;
}
};并显示错误Line 18: Char 41: runtime error: member access within null pointer of type 'ListNode' (solution.cpp) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:27:41
看一下这个屏幕截图

发布于 2021-04-16 17:00:12
错误:您正在尝试访问类型为ListNode的空指针的“next”数据成员。解决方案:您应该检查if(even!=NULL) then条件(even->next)例如1,2,3,4次迭代:
发布于 2021-04-16 17:19:24
您的前几行假设列表至少有两个元素。
这是你的第一个问题。
如果您解决了这个问题,请注意,当您进入循环体时,您所知道的就是该odd->next!=NULL && even->next!=NULL。
在第一次迭代中,这意味着列表至少有三个元素。
让我们画一个列表,看看会发生什么。
"o“和"e”是odd和even,大括号是列表中可能不存在的未知部分的边界:
1 -> 2 -> 3 -> { 4 -> 5 -> 6 ...
o e
odd->next = even->next
+---------+
| V
1 2 -> 3 -> { 4 -> 5 -> 6 ...
o e
odd = odd->next
+---------+
| V
1 2 -> 3 -> { 4 -> 5 -> 6 ...
e o
even = odd->next
+---------+
| V
1 2 -> 3 -> { 4 -> 5 -> 6 ...
o e哦..。
even = even->next
+---------+
| V
1 2 -> 3 -> { 4 -> 5 -> 6 ...
o e两次啊。
首先用笔(笔)和纸解决方案。
到目前为止,这是解决(和调试)指针操作问题的最佳方法。
我不会给你一个解决方案,因为那会有多有趣?
https://stackoverflow.com/questions/67121668
复制相似问题