题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 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;
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于