帶頭結點的單鏈表實現就地逆置的更優方法

2021-06-20 23:20:14 字數 506 閱讀 7725

在習慣上,我們在實現鍊錶的逆置時都會採用從第乙個結點開始遍歷並不斷將鍊錶的指向逆置的方法,但這樣做效率其實不高。假設要逆置的鍊錶為l,更好的方法是先用指標p儲存l-〉next,再將鍊錶l的頭結點置為null,亦即l-〉next=null,而後將p所指向的原存在於l的各個結點插入在已經置空的l中,作為l的第乙個元素結點,p則每次下移用於記錄剩下結點的位置。具體**如下:

p=l->next;

l->next=null;

while(p&&p->next)//該迴圈的限制條件意在說明空表和只含乙個元素結點的空表不用參加逆置

注:我一開始的**是這樣的

firstnode=p=l->next;

l->next=null;

while(p&&p->next)//該迴圈的限制條件意在說明空表和只含乙個元素結點的空表不用參加逆置

//end if

else//end else }

不難發現,進行條件判斷其實是多餘的,以後更要注意這種情況,以提高**簡潔性

帶頭結點的單鏈表就地逆置

本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。l是乙個帶頭結點的單鏈表,函式listreverse l linklist l 要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。void listreverse l link...

帶頭結點的單鏈表就地逆置

6 1 帶頭結點的單鏈表就地逆置 10 分 本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。l是乙個帶頭結點的單鏈表,函式listreverse l linklist l 要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。v...

帶頭結點的單鏈表就地逆置

本題要求實現乙個函式,對帶有頭結點的單鏈表進行就地逆置。函式介面定義 void reverse linklist l l是帶頭結點的單鏈表的頭指標。裁判測試程式樣例 include include typedef int elemtype typedef struct lnode lnode,lin...