您的位置:首页 > 职场人生

《剑指Offer》面试题57:删除链表中重复的节点

2016-07-09 21:07 465 查看
题目:在一个排序的链表中,如何删除重复的节点?

样例输入: 1 2 3 3 4 4 5

样例输出: 1 2 5

1.新建一个头节点,以防第一个节点被删除。

2.保存当前节点上个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等,则将当前节点的值与next.next节点的值比较,直到不相等或者null为止,最后将当前节点的上个节点pre指向最后比较不相等的节点。

3.如果当前节点与next节点不相等,则直接节点指针全部向后移动一位。

package com.test20160709;

/**
* Created by yan on 2016/7/9.
*/
public class DeleteDuplication {

public ListNode deleteDuplication(ListNode pHead)
{
if(pHead==null)
return pHead;
ListNode first = new ListNode(0);
first.next = pHead;
ListNode p = pHead;
ListNode pre = first;
while (p!=null&&p.next!=null){
if(p.val==p.next.val) {
int val = p.val;
while(p!=null&&p.val==val)
p = p.next;
pre.next = p;
}else {
pre= p;
p = p.next;
}
}
return first.next;
}

public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 链表