2015-10-15 67 views
-3

如果我们使用双指针,而不是单一的指针此代码工作正常..为什么这个程序使用单一指针不工作

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

你是什么意思(不)工作? –

+1

您能详细解答您遇到的问题吗?它是否构建?如果不是那么你会得到什么错误?它运行时崩溃吗?那么调试器告诉你它崩溃了?意外的结果?你期望的结果是什么,你得到了什么? –

+1

在* Node * prev = start,* current = start-> next后面检查'if(start == NULL || start-> next == NULL)''不起作用。损坏已经完成,NULL可能被解除引用。 – EOF

回答

1
Node *prev=start,*current=start->next; 
    if(start==NULL || start->next==NULL) 

这里是你的问题。

如果start==NULLcurrent=start->next当你得到一个错误,因为你正在尝试取消引用NULL指针

我假设你正在尝试做的事情链表上,并要返回0(NULL指针)以防列表中只有一个元素。

如果是这样的话,它足以交换功能的前两个指令

+0

这与我所说的无关,因为他在检查“start == NULL”之前执行了'current = start-> next'。 'if'语句本身是正确的,问题是在指令的顺序 编辑:我意识到,在我的答案访问'开始 - >下一个'的参考是有点模糊,我会编辑它,ty – bznein

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; 

改变它thsi:

Node *prev,*current; 
if(start==NULL || start->next==NULL) 
return 0; 

prev=start; 
current=start->next; 

然后描述你的问题清楚

相关问题