54、删除链表中重复的结点
一、题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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 }