算法問題(鏈表)--刪除排序鏈表中的重複元素&移除鏈表元素&刪除排序鏈表中的重複元素II

LeetCode第83號題–刪除排序鏈表中的重複元素,82號題–刪除排序鏈表中的重複元素II

題目如下

83. 刪除排序鏈表中的重複元素
給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。

示例 1:

輸入: 1->1->2
輸出: 1->2
示例 2:

輸入: 1->1->2->3->3
輸出: 1->2->3
203. 移除鏈表元素
刪除鏈表中等於給定值 val 的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
82. 刪除排序鏈表中的重複元素II
給定一個排序鏈表,刪除所有含有重複數字的節點,只保留原始鏈表中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5
輸出: 1->2->5
示例 2:

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

解答
82號問題是83號問題的升級版,203號問題和82號的解題思路是極其相似的,這三個問題放在一起更有參考性

83. 刪除排序鏈表中的重複元素

public ListNode deleteDuplicates(ListNode head) {
        ListNode cur = head;
        while (cur != null && cur.next != null) {
            if (cur.val == cur.next.val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        return head;
    }

203. 移除鏈表元素

public ListNode removeElements(ListNode head, int val) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode cur = dummyHead;
        while(cur.next != null){
            if(cur.next.val == val ){
                ListNode delNode = cur.next;
                cur.next = delNode.next;
            }else
                cur = cur.next;
        }

        return dummyHead.next;
    }

82. 刪除排序鏈表中的重複元素II

public ListNode deleteDuplicates(ListNode head) {
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode cur = dummyHead;

        while (cur.next != null && cur.next.next != null) {
            if (cur.next.val == cur.next.next.val) {
                ListNode delNode = cur.next;
                while (delNode.next != null && delNode.val == delNode.next.val) {
                    delNode = delNode.next;
                }
                cur.next = delNode.next;
            } else
                cur = cur.next;
        }

        return dummyHead.next;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章