1. 程式人生 > >去除已排序連結串列中的重複元素

去除已排序連結串列中的重複元素

題目描述

給定一個已排序的單鏈表,去除單鏈表中的重複元素,只保留一個重複的元素,並且返回新的單鏈表。

例如:
給出1->1->2,你的函式呼叫之後必須返回1->2。

輸入

一個已排序的單鏈表,例如1->1->2。

輸出

返回1->2。

程式碼示例

/**
 * 單鏈表的結構定義
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

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

演算法演示

擴充套件

去除單鏈表中重複元素,不保留任何重複的元素。

例如:
1->1->2->3->3->4,返回2->4

public static ListNode deleteDuplicatesAll(ListNode head)
{
    if (head == null) {
        return head;
    }

    ListNode dummy = new ListNode(Integer.MAX_VALUE); // 頭結點
    dummy.next = head;
    ListNode prev, cur;
    prev = dummy;
    cur = head;
    while
(cur != null) { boolean duplicated = false; while (cur.next != null && cur.val == cur.next.val) { duplicated = true; cur = cur.next; } if (duplicated) { // 刪除重複的最後一個元素 cur = cur.next; continue; } prev.next = cur; prev = prev.next; cur = cur.next; } prev.next = cur; return dummy.next; }

參考文章