9 單鏈表反轉

2021-09-07 11:16:52 字數 2071 閱讀 1063

單鏈表node的資料結構定義如下:

class

node

public

intgetdata()

public

void setdata(int

data)

public

node getnext()

public

void

setnext(node next)

}

把當前鍊錶的下乙個節點pcur插入到頭結點dummy的下乙個節點中,就地反轉。

dummy->1->2->3->4->5的就地反轉過程:

pcur是需要反轉的節點。

prev連線下一次需要反轉的節點

反轉節點pcur

糾正頭結點dummy的指向

pcur指向下一次要反轉的節點

偽**

1.就地反轉法

public

node reverselist1(node head)

return

dummy.next;

}新建乙個頭結點,遍歷原鍊錶,把每個節點用頭結點插入到新建鍊錶中。最後,新建的鍊錶就是反轉後的鍊錶。

pcur是要插入到新鍊錶的節點。

pnex是臨時儲存的pcur的next。

pnex儲存下一次要插入的節點

把pcur插入到dummy中

糾正頭結點dummy的指向

pcur指向下一次要插入的節點

偽**

2.新建鍊錶,頭節點插入法

public

node reverselist2(node head)

return

dummy.next;

}測試**:

linklist list4 = new

linklist();

for (int i = 5; i < 10; i++)

linklist list5 = new

linklist();

list5.head =list4.reverselist2(list4.head);

system.out.print("反轉後的鍊錶為:");

system.out.print("\r\n");

list5.print(list5.head);

//從head節點開始遍歷輸出

結果:反轉後的鍊錶為:98

765**:

單鏈表反轉

單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...

反轉單鏈表

include stdafx.h include include using namespace std struct listnode typedef listnode plistnode typedef plistnode list list creatlist return head void...

單鏈表反轉

想起很早以前某次面試,面試官很嚴肅的要求我現場手寫單鏈表反轉的 哥虎軀一震,心想 不就需要要個臨時變數來記錄位址嗎,用得著這樣煞有介事?雖然在那之前我的確沒寫過這個程式,哈哈哈 當時我草草寫了十來行 面試官不等我完成,就直接拿過去開始問問題。不知道是不是因為抗壓能力不足,在面試官的不斷 盤問 下,哥...