劍指Offer刷題 鍊錶

2021-10-10 15:37:24 字數 4293 閱讀 2896

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