83. 删除排序連結清單中的重複元素
- 題目
- 題解一:一次周遊
- 題解二:遞歸
題目
給定一個已排序的連結清單的頭 head , 删除所有重複的元素,使每個元素隻出現一次 。傳回 已排序的連結清單 。
示例 1:
輸入:head = [1,1,2]
輸出:[1,2]
示例 2:
輸入:head = [1,1,2,3,3]
輸出:[1,2,3]
提示:
連結清單中節點數目在範圍 [0, 300] 内
-100 <= Node.val <= 100
題目資料保證連結清單已經按升序 排列
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
題解一:一次周遊
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head ==null){
return head;
}
ListNode currentNode = head;
while(currentNode.next!=null){//這裡一定是next非空,才能繼續循環,不能是目前節點非空
if(currentNode.val==currentNode.next.val){
currentNode.next=currentNode.next.next;
}
else{
currentNode=currentNode.next;
}
}
return head;
}
}
題解二:遞歸
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head ==null || head.next==null){
return head;
}
head.next=deleteDuplicates(head.next);
return head.val==head.next.val ? head.next:head;
}
}