單鏈表實現反轉的三種方法

2021-08-03 20:41:07 字數 1382 閱讀 5081

單鏈表的操作是面試中經常會遇到的問題,今天總結一下反轉的幾種方案:

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...