29. 删除链表中重复的节点
在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。
数据范围
链表中节点 val 值取值范围 [0,100][0,100]。
链表长度 [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 dummy = new ListNode(-1);
dummy.next = head;
ListNode p = dummy;
while (p.next != null){
ListNode q = p.next;
//如果没有重复数,指针q只会向后移动一次
while (q != null && p.next.val == q.val) q = q.next;
//判断q是否只移动了一次,如果不是,直接p指针直接指向q,删除中间节点
if (p.next.next == q) p = p.next;
else p.next = q;
}
return dummy.next;
}
}
评论区