天天看點

力扣第83題.删除連結清單中的重複元素

83. 删除排序連結清單中的重複元素

  • ​​題目​​
  • ​​題解一:一次周遊​​
  • ​​題解二:遞歸​​

題目

給定一個已排序的連結清單的頭 head , 删除所有重複的元素,使每個元素隻出現一次 。傳回 已排序的連結清單 。

示例 1:

力扣第83題.删除連結清單中的重複元素

輸入:head = [1,1,2]

輸出:[1,2]

示例 2:

力扣第83題.删除連結清單中的重複元素

輸入: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;
        
    }
}