1. 程式人生 > >54、刪除鏈表中重復的結點

54、刪除鏈表中重復的結點

刪除鏈表 log -1 題目 nod tno color pan first

一、題目

在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後為 1->2->5

二、解法

 1 /*
 2  public class ListNode {
 3     int val;
 4     ListNode next = null;
 5 
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }
10 */
11 import java.util.HashMap;
12 public class Solution { 13 public ListNode deleteDuplication(ListNode pHead) 14 { 15 /*ListNode first = new ListNode(-1);//設置一個trick 16 first.next = pHead; 17 ListNode p = pHead; 18 ListNode last = first; 19 while(p != null && p.next != null){
20 if(p.val == p.next.val){ 21 int val = p.val; 22 while(p!= null && p.val == val) 23 p = p.next; 24 last.next = p; 25 }else{ 26 last = p; 27 p = p.next; 28 }
29 } 30 return first.next;*/ 31 ListNode first = new ListNode(-1); 32 first.next = pHead;//first指向頭結點,也是返回的結點 33 ListNode last = first;//使用指向p的前一個 34 ListNode p = pHead; 35 while(p != null && p.next != null){ 36 if(p.val == p.next.val){ 37 int val = p.val; 38 while(p != null && p.val == val)//刪除重復的結點 39 p = p.next; 40 last.next = p;//指向不是重復的結點 41 }else{ 42 last = p;//指向p 43 p = p.next;//後移一位 44 } 45 } 46 return first.next; 47 } 48 }

54、刪除鏈表中重復的結點