如果我们使用双指针而不是单指针,则此代码正常工作..
Node *pairwiseSwap(Node *start)
{
Node *prev=start,*current=start->next;
if(start==NULL || start->next==NULL)
return 0;
while(true)
{
Node *next=current->next;
current->next=prev;
if(next==NULL || next->next==NULL)
{
prev->next=next;
break;
}
prev->next=next->next;**//next to next**
prev=next;
current=prev->next;**//appending nodes to the previous one**
}
return start;
}
答案 0 :(得分:1)
Node *prev=start,*current=start->next;
if(start==NULL || start->next==NULL)
这是你的问题。
如果start==NULL
在执行current=start->next
时出现错误,因为您尝试取消引用NULL
指针
我假设您正在尝试在链接列表上执行某些操作,并且您希望返回0(NULL
指针),以防列表只有一个元素。
如果是这种情况,则交换函数的前两个指令就足够了
答案 1 :(得分:0)
首先要纠正这个问题:
Node *prev=start,*current=start->next;
/* ^___ start can it be null? */
/* according to the next code, yes it can */
if(start==NULL || start->next==NULL) /*test if start is null*/
return 0;
将其更改为:>
Node *prev,*current;
if(start==NULL || start->next==NULL)
return 0;
prev=start;
current=start->next;
然后清楚地描述你的问题