题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路解析:
- 需要两个指针来判断是不是有相等的值
- 先用一个指针找没有重复的结点,那么就把preNode赋给它
- 如果有重复的结点,就要找到下一个结点,然后把preNode换成下一个,但是此时preNode如果没有值的话,就要给pHead赋值为node的下一个。
代码:
/*
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 null;
}
ListNode preNode = null;
ListNode node =pHead;
while(node!=null){
//如果有相等的值就要找到下一个不相等的值
if(node.next!=null && node.val ==node.next.val){
int value = node.val;
while(node.next!=null&&node.next.val == value)
node = node.next;
if(preNode ==null){//第一个不相等的结点为头结点
pHead = node.next;
}else{//下一个数字,当前重复数字删掉了
preNode.next = node.next;
}
}else{//把不相等的节点存入preNode
preNode = node;
}
node = node.next;
}
return pHead;
}
}