題目:
給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。
示例 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...