刪除鍊錶中的重複元素(中等難度)(第82題)

2021-10-01 09:43:20 字數 1322 閱讀 5330

題目:

給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5

輸出: 1->2->5

示例 2:

輸入: 1->1->1->2->3

輸出: 2->3

分析:因為最近一直在刷鍊錶型別的題目,所以拿到這個題目的時候我首先想到了用雙指標來做,即,快慢指標。先生成乙個頭節點dummy,指向head。快指標的職責就是往前遍歷節點,先比較快指標指向節點與下乙個節點的值,當遇到重複節點的時候繼續向下遍歷,而這時候慢指標原地不動,當快指標找到第乙個和之前節點的值不同的節點時,判斷快慢指標的位置關係。如果慢指標的下乙個節點就是快指標,就讓慢指標=快指標,反之的話,說明中間隔著重複節點,此時就讓慢指標的next指向快指標的next。知道遍歷完成。

**:

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

listnode dummy = new listnode(0);

dummy.next = head;

listnode fast = dummy.next;

listnode slow = dummy;

while (fast != null)

if (slow.next == fast)

else

fast = fast.next;

}return dummy.next;

}}

分析二:

看了大佬的解法,發現還有遞迴的方法, 就是由上面的解法中演變過來的,遞迴的三要素:終止條件,遞迴進行下去的條件,返回值。因為head節點是乙個個往後遍歷的,所以當head節點為空的時候,退出返回結果,而題目中要求重複值得節點不應該再出現在新的鍊錶中,所以就是下面**的return deleteduplicates(head.next)。直接看**吧,理解的更透徹。

**:

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

if (head.next != null && head.val == head.next.val)

return deleteduplicates(head.next);

} else

return head;

}}

刪除有序陣列中的重複元素(C (中等難度))

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...

刪除鍊錶中的重複元素

昨晚在參加蘭亭集勢的筆試時,看到了這樣乙個題目。大致意思就是給出乙個單鏈表,鍊錶中有重複的元素,需要刪除重複的元素。如 1 2 3 5 4 3 7,刪除重複元素後變成1 2 3 5 4 7。思路其實還蠻簡單 建立三個工作指標p,q,r,然後p 遍歷 全表。p每到乙個結點,q就從這個結點往後遍歷,並與...

鍊錶刪除重複元素1,刪除重複元素2,

刪除排序鍊錶中的重複元素 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 思路 很簡單。先將兩個指標進行操作,start,end然後判斷end是否等於空即可 definition for s...