我的位置: 首頁 > 學習專區 > .NET技術 > C語言鏈表逆序技巧

C語言鏈表逆序技巧

2013-05-30 08:25:36
來源:
[導讀] 簡潔的做法是遍歷鏈表,元素進棧,遍歷的同時銷毀原來的鏈表。元素出棧,建立新鏈表。高效的是,用指向鏈表結點指針的指針操作直接首尾交換
簡潔的做法是

遍歷鏈表,

元素進棧,

遍歷的同時銷毀原來的鏈表。

元素出棧,

建立新鏈表。

高效的是,

用指向鏈表結點指針的指針操作

直接首尾交換指針值(兩兩進行)

一般的是前插法

實際上根本就不用插入,一次遍歷就可以完成了。

鏈表的逆序,必將涉及到兩個以上指針,一般用三個指針,

下面是一個人的程序:

struct List1 *reverse(List1 *h) //h為鏈表的頭指針

{

struct List1 *p,*v1,*v2;

v2=h;

v1=NULL;

while( v2!=NULL ){

p=v2->pNext;

v2->pNext=v1;

v1=v2;

v2=p;

}

return v1;

}

另一個人的:

struct IntNode* res(struct IntNode* h)

{

struct IntNode *s, *s1;

s = h;

h = NULL;

while (s)

{

s1 = s;

s = s->next;

s1->next = h;

h = s1;

}

return h;

}

算法都是一致,但順序不一樣,這直接點明了鏈表操作的核心——順序,鏈表的算法主要難在順序上。

逆序操作中,要將一個指針指向前一個節點,中間必然斷開,這就需要兩個指針指向斷開處的一前一后。

上面兩個程序都是這樣,不同在于指針移動的位置。

深圳北大青鳥

評論
熱點專題
>>
相關文章推薦
>>
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
在线观看亚洲中文AV | 青青草原国产在线大伊人 | 亚洲欧美动漫传媒国产日韩 | 亚洲一区二区人妖: | 天天看片高清观看免费国产 | 午夜精品久久久久久久99热 |