演算法初探001 單鏈表反轉

2021-07-05 22:24:33 字數 1874 閱讀 1646

單鏈表的反轉問題是一道很基本的問題。題目如下:

有乙個單鏈表 1 ->2->3->4->5->6 反轉後鍊錶為:6->5->4->3->2->1.

解析:可以使用三個指標pre ,temp,next對逐個節點進行反轉。詳細流程如下:

(4) 初始狀態

(2)第一次迴圈:

pre 和 tmp 後移一位 , 第一次迴圈結束,第乙個節點指向了頭節點。

(3) 第二次迴圈

(4)如此迴圈下去,直到最後乙個節點被反轉。

具體**如下:

linklist reverselinklist(linklist head)

head = pre;

return head;

}

解析:從第2個節點到第n個節點,依次逐節點插入到第1個節點(head節點)之後,最後將第乙個節點挪到新錶的表尾。

(1)初始狀態

(2)開始迴圈。第一次迴圈將節點3插入到節點1後面(**中的步驟分別對應下圖中的步驟)

(3)將第乙個節點加到鍊錶尾部

(1)p->next=head;//相當於成環 

(2)head=p->next->next;//新head變為原head的next

p->next->next=null;//斷掉環

具體**如下:

linklist reverselinklist(linklist head)

p->next=head;//相當於成環

head=p->next->next;//新head變為原head的next

p->next->next=

null;//斷掉環

return head;

}

單鏈表反轉演算法

struct listnode 想到兩種方法 想法是構建乙個新的單鏈表,然後遍歷原來的單鏈表,每遍乙個就把它插入到最新的單鏈表的開頭,下面是 struct listnode reverselist struct listnode list temp list last null while temp...

C 演算法 反轉單鏈表

反轉單鏈表,我使用了兩種方法,不過他們都很相近。宣告 class clist 宣告反轉單鏈表函式 void reversesll clist clist prenode nullptr void csinglelinkedlist reversesll clist node,clist prenod...

演算法題 反轉單鏈表

時間限制 1秒 空間限制 32768k 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。解法一.迴圈反轉鍊錶 非遞迴法 整體思路就是,從原鍊錶的頭部乙個乙個取節點並插入到新鍊錶的頭部 p始終指向要反轉的結點 newhead 指向反轉後的首結點 每反轉乙個結點,把p結點的next指向newhead,ne...