排序的單鏈表中刪除重複的結點

原題

  Given a sorted linked list, delete all duplicates such that each element appear only once.
  For example,
  Given 1->1->2, return 1->2.
  Given 1->1->2->3->3, return 1->2->3.算法

題目大意

  給定一個單鏈表,刪除重複的元素,相同的只保留一個。app

解題思路

  使用一個指針指向鏈表的頭,若是下一個與當前的結點相等則刪除,直到遇到一個不相同的,則指針指向這個新的結點,重複操做,直到全部的結點都處理完。spa

代碼實現

結點類.net

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

算法實現類指針

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode point;
        ListNode tail = head; // 指向新結點的尾部,開始時新鏈只有一個元素,就是鏈頭

        if (head != null) {
            point = head.next; // 指向另外一個鏈的頭部
            while ( point != null) { // 另外一個鏈還未到末尾

                if (tail.val != point.val) { // 若是與尾節點不相同,就將不相同的節點連接到tail的下一個位置
                    tail.next = point;
                    tail = tail.next; // 從新指向鏈尾
                }

                point = point.next;
            }

            tail.next = null; // 鏈尾指向空
        }

        return head;
    }
}
相關文章
相關標籤/搜索