删除链表中重复的结点

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

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 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; } }

相关帖子

欢迎来到这里!

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

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