2015-10-15 75 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; 

然後描述你的問題清楚

相關問題