《劍指offer》刷題(1)鍊錶

2021-10-08 14:19:28 字數 1934 閱讀 8477

最近二刷《劍指offer》的題目,寫寫其中關於鍊錶的解題思路

劍指offer18題

需要兩個指標,pre儲存刪除節點的前驅指標,cur儲存要刪除節點的指標

public listnode deletenode

(listnode head,

int val)

if(cur != null)

return dummy.next;

}

劍指offer22題

用快慢指標,fast先走k步,如果碰到null,說明k>鍊錶長度,否則同時啟動fast和slow指標遍歷

public listnode getkthfromend

(listnode head,

int k)

else

}while

(fast!=null)

return slow;

}

劍指offer24題

穿針引線法,主要儲存當前節點的next就好

public listnode reverselist

(listnode head)

return cur;

}

劍指offer25題

哨兵,借鑑歸併排序

public listnode mergetwolists

(listnode l1, listnode l2)

else

cur = cur.next;

} cur.next =

(l1 == null ? l2 : l1)

;return res.next;

}

劍指offer35題

分三步,複製每個節點,複製random指標,拆分,注意細節就行

public node copyrandomlist

(node head)

private

void

copy

(node head)

}//任意指標在複製後的鍊錶上也體現

private

void

randomdirect

(node head)

head=clone.next;}}

//重新分開鏈結,至少分為兩個單節點的鍊錶

private node relist

(node head)

return clonehead;

}

36題

思路:題目中說生成「排序迴圈雙向鍊錶」,可以考慮用中序遍歷來實現,同時為了完成迴圈至少需要兩個指標,設定乙個head指標指向煉表頭,設定乙個pre指標遍歷,當遍歷到root的節點的最左節點的時候,單獨處理一下head和pre

class

solution

//中序遍歷構造鍊錶

void

inorder

(node cur)

pre=cur;

//更新pre為當前節點

if(head==null) head=cur;

//head是最左的節點

inorder

(cur.right);}

}

這道題解法很妙,node1要麼是公共節點,要麼是null

public listnode getintersectionnode

(listnode heada, listnode headb)

listnode node1=heada;

listnode node2=headb;

while

(node1!=node2)

return node1;

}

劍指Offer刷題 鍊錶

劍指 offer 18.刪除鍊錶的節點 難度簡單 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的...

劍指offer刷題日記 鍊錶

鍊錶03 從尾到頭列印鍊錶 python 採用insert方法 class solution def printlist self,listnode if not listnode return result while listnode result.insert 0 listnode.val l...

劍指offer刷題之 鍊錶

題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路 非遞迴 1 首先新增乙個頭節點,以方便碰到第乙個,第二個節點就相同的情況 2 設定 p1 p2 指標,p1指標指向當前確定不重複...