为什么这个程序使用单指针不起作用

时间:2015-10-15 07:12:50

标签: c data-structures linked-list

如果我们使用双指针而不是单指针,则此代码正常工作..

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;
}

2 个答案:

答案 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;

然后清楚地描述你的问题