题目:在一个排序的链表中,如何删除重复的节点?
样例输入: 1 2 3 3 4 4 5样例输出: 1 2 5
思路:
- 新建一个头节点,以防第一个节点被删除。
- 保存当前节点上个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等,则将当前节点的值与next.next节点的值比较,直到不相等或者null为止,最后将当前节点的上个节点pre指向最后比较不相等的节点。
- 如果当前节点与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;
}
}
}