剑指offer-删除链表中重复的节点

题目链接:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

解题思路:

1. 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况

2.设置 pre ,last 指针, pre指针指向当前确定不重复的那个节点,而last指针相当于工作指针,一直往后面搜索。

这道题目是删除重复的节点,不是去重!!!

画个图方便理解。

 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 public class Solution {
12     public ListNode deleteDuplication(ListNode pHead)
13     {
14 
15         if (pHead==null || pHead.next==null){return pHead;}
16         ListNode Head = new ListNode(0);
17         Head.next = pHead;
18         ListNode pre  = Head;
19         ListNode last = Head.next;
20         while (last!=null){
21             if(last.next!=null && last.val == last.next.val){
22                 // 找到最后的一个相同节点
23                 while (last.next!=null && last.val == last.next.val){
24                     last = last.next;
25                 }
26                 pre.next = last.next;
27                 last = last.next;
28             }else{
29                 pre = pre.next;
30                 last = last.next;
31             }
32         }
33         return Head.next;
34         
35 
36     }
37 }

猜你喜欢

转载自www.cnblogs.com/wangyufeiaichiyu/p/10877941.html