题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
设置两个指针,一个指向头结点的前一个(因为第一个也可能是重复节点),另一个指向第一个节点。
然后比较第二个指针的当前值和下一个值(如果存在的话),若相等则一直比较下去,最后该指针会跳转到不重复的位置。然后 第一个指针的下一个节点 指向 当前第二个指针所在的节点。如果不相等,那么两指针同时后移一位。
最后返回 第一个指针的头结点的下一个节点。
import java.util.*;
public class Solution {
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ListNode deleteDuplication(ListNode pHead)
{
ListNode preN = new ListNode(-1);
preN.next = pHead;
ListNode ans = preN;
ListNode nowN = pHead;
while(nowN != null){
if(nowN.next != null && nowN.val == nowN.next.val){
while(nowN.next != null && nowN.val == nowN.next.val){
nowN = nowN.next;
}
nowN = nowN.next;
preN.next = nowN;
}else{
nowN = nowN.next;
preN = preN.next;
}
}
return ans.next;
}
}
如有错误或者不合理的地方,敬请指正~
加油!!