的前两个指令就足够了
如果我们使用双指针而不是单指针,这段代码可以正常工作。
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;
}
Node *prev=start,*current=start->next;
if(start==NULL || start->next==NULL)
这就是你的问题。
如果start==NULL
,你得到一个错误时做current=start->next
,因为你试图解引用一个NULL
指针
我假设您正在尝试在链表上做一些事情,并且您希望返回0 (NULL
指针),以防列表只有一个元素。
如果是这种情况,交换函数
你首先要纠正这个:
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;
然后清楚地描述你的问题