删除链表中重复的结点_java

 1 package algorithms;
 2 
 3 /*
 4 public class ListNode {
 5    int val;
 6    ListNode next = null;
 7 
 8    ListNode(int val) {
 9        this.val = val;
10    }
11 }
12 */
13 
14 /*
15  * 
16  * 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,
17 重复的结点不保留,返回链表头指针。(认真审题)
18 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
19 
20 从头遍历整个链表 如果当前节点pNode的值与下一个节点相同
21 那么他们就是重复的节点  需要被删除
22 为了保证删除之后的链表仍然是相连的
23 需要把当前节点的前一个节点pPreNode保存起来
24 循环的过程中确保pPreNode始终与下一个没有重复的节点连接在一起
25 
26 */
27 
28 public class DeleteDuplication {
29     public ListNode deleteDuplication(ListNode pHead) {
30         ListNode pPreNode = null;
31         ListNode pNode = pHead;
32         while (pNode != null) {
33             ListNode pNext = pNode.next;
34             boolean needDelete = false;
35             if (pNext != null && pNext.val == pNode.val)
36                 needDelete = true;
37             if (!needDelete) {
38                 pPreNode = pNode;
39                 pNode = pNode.next;
40             } else {
41                 ListNode pDeleteNode = pNode;
42                 int value = pDeleteNode.val;
43                 while (pDeleteNode != null && pDeleteNode.val == value) {
44                     pNext = pDeleteNode.next;
45                     pDeleteNode = pNext;
46                 }
47                 if (pPreNode == null)
48                     pHead = pNext;
49                 else
50                     pPreNode.next = pNext;
51                 pNode = pNext;
52             }
53         }
54 
55         return pHead;
56     }
57 }

 

转载于:https://www.cnblogs.com/ustc-anmin/p/10610259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值