题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
package 秋招刷题.剑指offer_链表;
/*思路就是一起前以后两个指针,前面指针作为输出,后面一个指针作为当前结点
*/
public class 删除链表中重复的结点 {
public static void main(String[] args) {
ListNode one = new ListNode(1);
ListNode two = new ListNode(2);
ListNode three = new ListNode(2);
ListNode four = new ListNode(4);
one.next = two;
two.next = three;
three.next = four;
deleteDuplication(one);
}
public static ListNode deleteDuplication(ListNode pHead) {
if (pHead == null || pHead.next == null)
return pHead;
ListNode head = new ListNode(0);
head.next = pHead;
ListNode last = head; //指向head,改变它head后面的也改变了但是输出头结点还是要head
ListNode next = last.next;//一开始指向phead,后面一直指向当前结点
while (next != null) {
if (next.next != null && next.val == next.next.val) {
while (next.next != null && next.val == next.next.val) {
next = next.next;
}
last.next = next.next; //这里上一个结点指向了最后一个重复结点的next。即
next = next.next;
}else { //如果不相等就往后移动
last = last.next;
next = next.next;
}
}
return head.next;
}
}