题目:给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1→2→3→3→4→4→5, 返回1→2→5.
给出的链表为1→1→1→2→3, 返回2→3.
解答:
- 1.设置伪结点,方便处理
- 2.双指针pre和p
- 3.当遇到当前节点值(p)和下一节点值相等的节点时,进行while循环找到下一个不相等的节点,挂到pre节点上
- 4.当遇到当前节点值和下一节点值不相等的节点时,pre和p都移动到下一个节点接着遍历就行
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode pre=dummy;
ListNode p=head;
while(p!=null&&p.next!=null){
if(p.val==p.next.val){
while(p.next!=null&&p.val==p.next.val){
p=p.next;
}
pre.next=p.next;
p=p.next;
}
else{
pre=p;
p=p.next;
}
}
return dummy.next;
}
}