在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
//删除链表中重复的结点
public static ListNode deleteDuplication(ListNode pHead)
{
if (pHead == null || pHead.next == null) {
return pHead;
}
ListNode head = new ListNode(-1);
ListNode move = head;
ListNode p = pHead;
ListNode q = pHead.next;
while (q != null) {
if (p.val != q.val) {
move.next = p;
move = move.next;
p = p.next;
q = q.next;
}
else {
while (q != null && q.val == p.val) {
q = q.next;
}
if ( q == null) {
break;
}
else {
p = q;
q = q.next;
}
}//尾部元素的重复判断
}
//判断尾部元素是否有重复
if (p.next == null) {
move.next = p;
}
else {
move.next = null;
}
return head.next;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode p1 = new ListNode(1);
ListNode p2 = new ListNode(1);
ListNode p3 = new ListNode(3);
ListNode p4 = new ListNode(5);
ListNode p5 = new ListNode(5);
head.next = p1;
p1.next = p2;
p2.next = p3;
p3.next = p4;
p4.next = p5;
p5.next = null;
ListNode p = deleteDuplication(head);
while (p != null) {
System.out.println(p.val);
p = p.next;
}
}