删除链表中重复的结点

本贴最后更新于 2450 天前,其中的信息可能已经水流花落

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5

解题思路

  • 新建一个头结点 first,作为返回结点的上一结点;
  • 用 last=first 作为移动结点;
  • 暂时令 last.next = pHead,此时有两种情况:
    • 如果下一结点值与 pHead 相等,则找到第一个与 pHead 值不等的结点 node,令 last.next=node;
    • 如果下一结点值与 pHead 不等,说明本 node 可以加入新链表中,则令 last=last.next,进行下一个结点的判断;

代码

public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        ListNode first = new ListNode(-1);
		ListNode last = first;
        last.next = pHead;
        ListNode p = pHead;
        while (p != null && p.next != null) {
            if (p.val == p.next.val) {
                int val = p.val;
                while (p != null && p.val == val)
                    p = p.next;
                last.next = p;
            } else {
                last = p;
                p = p.next;
            }
        }
        return first.next;
    }
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...