在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
用了一个头结点。
用了两个指针其中一个是工作指针。
工作指针探查自己是否和下一个节点相同,如果相同那么临时声明一个指针直查到不相同处为止,工作指针移动到此位置。
另一个指针始终指向工作指针。
最后返回头结点的下一个即可。
注意:链表中如果涉及到比较数值,那么务必在比较前判断节点是否为空。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead==null) return pHead;
ListNode head=new ListNode(0);
head.next=pHead;
ListNode last=pHead;
ListNode pre=head;
while(last!=null)
{
if(last.next!=null&&last.next.val==last.val)
{
ListNode temp=last;
while(temp!=null&&temp.val==last.val)//这里需要判空
{
temp=temp.next;
}
last=temp;
pre.next=last;
}else{
pre=pre.next;
last=last.next;
}
}
return head.next;
}
}