單鏈表的操作是面試中經常會遇到的問題,今天總結一下反轉的幾種方案:
1 ,兩兩對換
2, 放入陣列,倒置陣列
3, 遞迴實現
**如下:
#include
#include
typedef
struct node
node,
*pnode;
pnode createnode()
phead->pnext=
null
;int n;
pnode ph=phead;
for(
int i=
0; i<
5; i++
) p->data=
(i+2)*
19;phead->pnext=p;
p->pnext=
null
; phead=phead->pnext;
}return ph;
}int
list
(pnode head)
printf
("鍊錶長度為:%d\n"
,count)
;return count;
}pnode reverse2
(pnode head)
//兩兩節點之間不斷交換
return pre;
}void
reverse1
(pnode head,
int count)
//把鍊錶的節點值放在陣列中,倒置陣列
;for
(int i=
0; ipnext!=
null
; i++
)for
(int j=
0,i=count-
1; j,i--
)printf
("%d\t"
,a[i]);
}pnode reverse3
(pnode pre,pnode cur,pnode t)
//遞迴實現鍊錶倒置
pnode new_reverse3
(pnode head)
intmain()
毫無疑問,遞迴是解決的最簡單方法,四行就能解決倒置問題。
思路參考:
這裡注意: head ->next = pre; 以及 pre = head->next,前者把head->next 指向 pre,而後者是把head->next指向的節點賦值給pre。如果原來head->next 指向 pnext節點,前者則是head重新指向pre,與pnext節點斷開,後者把pnext值賦值給pre,head與pnext並沒有斷開。
單鏈表逆序三種方法
需要三個指標,前驅p1,當前p2,後繼p3 結束的條件是p2 null void reverse1 pnode head p1 p2 p2 p3 head next p1 head變成新頭節點返回 else return pnode reverse1 pnode head p1 p2 p2 p3 r...
c 之單鏈表的三種反轉
在刷leetcode題時,鍊錶的反轉可分三種情況 1 反轉整個鍊錶 2 反轉其中連續的一部分 3 分段反轉 一 反轉整個鍊錶 leetcode206.反轉鍊錶 示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null definition for singly linked li...
判斷單鏈表有環的三種方法
判斷鍊錶是否有環的三種方法 1.在節點listnode中增加乙個域,用於記錄此節點是否已經被訪問,如下listnode中被注釋掉 此方法簡單,能找出環開始的節點,但是增加了鍊錶的開銷。如果鍊錶非常大 則需要十分大的記憶體來儲存此域。2.使用鍊錶逆序的方法。從頭結點開始一直將鍊錶逆序,頭結點的next...