17.删除链表中重复的节点
在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。
数据范围:
链表中节点 val 值取值范围 [0,100]。链表长度 [0,100]。
样例1:
输入:1->2->3->3->4->4->5
输出:1->2->5
样例2:
输入:1->1->1->2->3
输出:2->3
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplication(ListNode head) {
//创建一个虚拟头节点,简化边界条件处理
ListNode node = new ListNode(-1);
node.next = head;
//初始化指针p,指向当前确定不重复的最后一个节点
ListNode p = node;
//遍历链表
while(p.next!=null){
//初始化q指针,从p.next开始检查重复
ListNode q = p.next;
//移动指针q,直到找到最后一个重复节点
while(q.next!=null&&q.next.val==q.val)q = q.next;
//判断是否发现重复节点,如果没有重复,移动p指针
if(q == p.next) p = q;
//否则,跳过所有重复节点
else p.next = q.next;
}
//返回处理后的链表头节点
return node.next;
}
}

浙公网安备 33010602011771号