1. 程式人生 > >【LeetCode-面試演算法經典-Java實現】【083-Remove Duplicates from Sorted List(排序的單鏈表中刪除重複的結點)】

【LeetCode-面試演算法經典-Java實現】【083-Remove Duplicates from Sorted List(排序的單鏈表中刪除重複的結點)】

原題

  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.

題目大意

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

解題思路

  使用一個指標指向連結串列的頭,如果下一個與當前的結點相等則刪除,直到遇到一個不相同的,則指標指向這個新的結點,重複操作,直到所有的結點都處理完。

程式碼實現

結點類

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}

演算法實現類

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; } }

評測結果

  點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。

這裡寫圖片描述

特別說明