最近二刷《劍指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指標指向當前確定不重複...