劍指 offer 18. 刪除鍊錶的節點
難度簡單
給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。
返回刪除後的鍊錶的頭節點。
**注意:**此題對比原題有改動
示例 1:
輸入: head = [4,5,1,9], val = 5
輸出: [4,1,9]
解釋: 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.
示例 2:
輸入: head = [4,5,1,9], val = 1
輸出: [4,5,9]
解釋: 給定你鍊錶中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.
說明:
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
if(head.val == val)
while
(head.next.val != val)
head.next=head.next.next;
return n;}}
//雙指標
class
solution
if(head.val == val)
listnode post = head;
listnode pre = head.next;
while
(pre != null && pre.val != val)
if(pre != null)
return head;
}}
劍指 offer 22. 鍊錶中倒數第k個節點
難度簡單
輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。
示例:
給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.
返回鍊錶 4->5.
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
while
(right!=null)
return left;
}}
劍指 offer 24. 反轉鍊錶
難度簡單
定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。
示例:
輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
限制:
0 <= 節點個數 <= 5000
注意:本題與主站 206 題相同:
/**
* definition for singly-linked list.
* public class listnode
* }*///方法一:迭代(雙指標) 好理解
class
solution
return pre;}}
//遞迴
class
solution
private listnode recur
(listnode cur, listnode pre)
}
理解第一種即可劍指 offer 25. 合併兩個排序的鍊錶
難度簡單
輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。
示例1:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
限制:
0 <= 鍊錶長度 <= 1000
注意:本題與主站 21 題相同:
/**
* definition for singly-linked list.
* public class listnode
* }*///遞迴
class
solution
if(l2 ==null)
if(l1.val
else}}
//偽頭結點 易懂
class
solution
else
cur= cur.next;
} cur.next = l1 != null?l1:l2;
return dum.next;
}}
劍指 offer 52. 兩個鍊錶的第乙個公共節點
難度簡單
輸入兩個鍊錶,找出它們的第乙個公共節點。
如下面的兩個鍊錶**:**
在節點 c1 開始相交。
示例 1:
輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,0,1,8,4,5], skipa = 2, skipb = 3
輸出:reference of the node with value = 8
輸入解釋:相交節點的值為 8 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [4,1,8,4,5],鍊錶 b 為 [5,0,1,8,4,5]。在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3 個節點。
示例 2:
輸入:intersectval = 2, lista = [0,9,1,2,4], listb = [3,2,4], skipa = 3, skipb = 1
輸出:reference of the node with value = 2
輸入解釋:相交節點的值為 2 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [0,9,1,2,4],鍊錶 b 為 [3,2,4]。在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。
示例 3:
輸入:intersectval = 0, lista = [2,6,4], listb = [1,5], skipa = 3, skipb = 2
輸出:null
輸入解釋:從各自的表頭開始算起,鍊錶 a 為 [2,6,4],鍊錶 b 為 [1,5]。由於這兩個鍊錶不相交,所以 intersectval 必須為 0,而 skipa 和 skipb 可以是任意值。
解釋:這兩個鍊錶不相交,因此返回 null。
注意:
/**
* definition for singly-linked list.
* public class listnode
* }*/public
class
solution
return c1;
}}
劍指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)鍊錶
最近二刷 劍指offer 的題目,寫寫其中關於鍊錶的解題思路 劍指offer18題 需要兩個指標,pre儲存刪除節點的前驅指標,cur儲存要刪除節點的指標 public listnode deletenode listnode head,int val if cur null return dumm...
劍指offer刷題之 鍊錶
題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路 非遞迴 1 首先新增乙個頭節點,以方便碰到第乙個,第二個節點就相同的情況 2 設定 p1 p2 指標,p1指標指向當前確定不重複...