劍指Offer 刪除鍊錶的節點(刪除重複節點)

2021-10-13 12:36:00 字數 1735 閱讀 4733

劍指offer源**

題目二:刪除鍊錶中重複的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。

返回刪除後的鍊錶的頭節點。

注意:此題對比原題有改動

示例 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.

* struct listnode

* };

*/class

solution

while

(cur-

>next && cur-

>next-

>val != val)

if(cur-

>next && cur-

>next-

>val == val)

return head;}}

;

解法二:遞迴法

思路:

注意刪除後,剩餘的鍊錶要再次拼接到head的後面。

**實現:

class

solution

};

struct listnode

;// 基於乙個假設:要刪除的節點在鍊錶中

void

deletenode

(listnode *

* plisthead, listnode * ptobedeleted)

// 鍊錶只有乙個節點

elseif(

*plisthead == ptobedeleted)

// 鍊錶中有多個節點,刪除尾節點

else

// pnext->m_pnext = nullptr;

delete ptobedeleted;

ptobedeleted =

nullptr;}

}

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

示例1

輸入

返回值

**實現:

/*

struct listnode

};*/

class

solution

else

}return root-

>next;}}

;

劍指offer 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。思路 單指標,找到需要刪除的節點的前乙個節點即可。definition for singly linked list.public class listnode class solution if head...

劍指Offer 刪除鍊錶的節點

劍指offer 刪除鍊錶的節點 題目要求 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。解題思路 單鏈表刪除節點,直接將當前節點的指標指向下乙個節點的next即可 因為該題是查詢節點中的值是否等於給定值,並且找到之後無法向前找節點 在確認是否是要刪除的...

劍指offer 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。1 struct listnode 1 void deletenode listnode plisthead,listnode ptobedeleted 2if plistnode ptobedeleted 56 if pt...