您的位置:首页 > Web前端

剑指Offer_56_删除链表中重复的结点

2016-08-28 09:35 267 查看

题目描述

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

解题思路

利用一个指针指向当前需要检查的结点p的前一个指针pre,对于当前要检查的结点p,对后面的结点进行遍历,直到找到与之不同的结点,如果存在相同的结点,那么p的前一个结点指向找到的不同于的p的结点,删除p和其重复的值,然后p指向pre的下一个结点(找到的不同于原来p的结点),继续判断,直到链表的末尾。

实现

/*链表结点的定义*/
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}
/*实现*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
ListNode pre = null, p = pHead;
if (pHead == null || pHead.next == null) return pHead;
while (p != null){
ListNode q = p.next;
int count = 0;
while (q!=null && q.val == p.val){
q = q.next;
count ++;
}

if (count > 0){
//有重复的
if (pre == null) pHead = q;
else pre.next = q;
}else {
if (pre == null) pHead = p;
pre = p;
}

p = q;

}

return pHead;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 遍历 Java