如何將鍊錶倒序排列 c 程式設計師面試筆記

2021-10-07 09:32:16 字數 1832 閱讀 4808

public

class

lnode

//一次遍歷原地反轉

lnode pre;

lnode cur;

lnode next;

cur = head.next;

next = cur.next;

cur.next =

null

;//表首節點變為表尾節點

if(next.next ==

null

)//只有兩個元素的情況

while

(next.next !=

null

)//三個元素以上

head.next = next;

next.next = cur;

}//遞迴逆序演算法02

private

static lnode

reversewithouthead

(lnode firstnode)

else

}public

static

void

reverse02

(lnode head)

lnode newnode =

reversewithouthead

(head.next)

; head.next = newnode;

}//插入演算法03

public

static

void

reserve03

(lnode head)

else}}

}

測試:

static

void

main

(string

args)

; lnode<

int> l04 =

newlnode

<

int>()

; lnode<

int> l03 =

newlnode

<

int>()

; lnode<

int> l02 =

newlnode

<

int>()

; lnode<

int> l01 =

newlnode

<

int>()

; lnode<

int> head =

newlnode

<

int>()

;//頭節點不儲存資料,標記入口位置

《程式設計師面試經典》 鍊錶

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。思路 快慢指標,前乙個指標比後乙個指標慢k步。struct listnode class solution else while phead next null return ptail 實現乙個演算法,刪除單向鍊錶中間的某個結點,假定你只能訪問該結點。給定...

程式設計師面試金典 鍊錶

這裡我們可以使用乙個表來記錄訪問過的節點值,這樣只要一次遍歷就可以。但是需要輔助空間。如果不使用臨時緩衝區,該怎麼解決?使用兩個指標,乙個指標指向當前節點,另乙個指標用於向後遍歷剩餘節點,把重複節點刪除。這裡刪除只是用乙個節點就可以,檢查ptr next data是否重複就可以。這裡給出兩種方法 第...

《程式設計師面試金典》回文鍊錶

題目描述 請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例 返回 true 返回 false 思路我們有兩種方法,比較容易想到的方法應該是使用棧儲存前一半的結點,然後對於後一半的結點再乙個個的與棧內的結點比較是否相等 還有...