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; } }
算法實現類指針
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; } }