题目介绍
力扣83题:leetcode-cn.com/problems/re…
分析
由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。
具体地,初始时pre指针指向头节点,我们从指 cur 指向链表的头节点的下一个节点开始,随后开始对链表进行遍历。如果当前 cur 与 pre 对应的元素相同,那么我们就将cur指向的节点从链表中移除;否则说明链表中已经不存在其它与cur 对应的元素相同的节点,因此可以将 cur 指向cur.next。
当遍历完整个链表之后,我们返回链表的头节点即可。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode pre = head;
ListNode cur = head.next;
while(cur != null) {
//存在元素值相同的节点
if(pre.val == cur.val) {
pre.next = cur.next;
cur = cur.next;
}else {
pre = cur;
cur = cur.next;
}
}
return head;
}
}