[LeetCode]Remove Duplicates from Sorted List II
2014-05-06 14:28
225 查看
题目描述
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example,
Given
1->2->3->3->4->4->5, return
1->2->5.
Given
1->1->1->2->3, return
2->3.
给定一排好序的链表,去除其中具有相同值的节点
解题思路
相对于Remove Duplicates from Sorted List,此题加深了一步,是去除链表中具有相同值的所有节点。为解决此题,考虑到一下几种情况:
i)无重复节点
ii)重复节点在链表头部
iii)重复节点在链表中部
代码
针对上述三种情况,我们需要用四个变量来完成题目要求:ListNode newHead = head;// 新的头节点初始化
ListNode lastNode = head;// 倒数第一个无重复节点
ListNode secondNode = null;// 记录倒数第二个无重复节点
int dup = 0;// 判断当前节点是否是重复节点
具体实现如下:
public static ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) { return head; } ListNode node = head.next; ListNode newHead = head;// 新的头节点初始化 ListNode lastNode = head;// 倒数第一个无重复节点 ListNode secondNode = null;// 记录倒数第二个无重复节点 int dup = 0;// 判断当前节点是否是重复节点 while (node != null) { dup = 0; while (node != null && node.val == lastNode.val) { dup++; lastNode.next = node.next;// 重复的则将上一个无重复节点指向当前重复节点的下一个节点 node = node.next; } if (dup > 0) { if (lastNode == newHead) { // 如果上一个无重复节点是头节点,并且在此轮循环中是重复节点,则重置头节点 newHead = node; secondNode = null; } else { // 如果上一个无重复节点是头节点,并且在此轮循环中是重复节点,则将倒数第二个无重复节点指向当前节点 secondNode.next = node; } } else { //如果此轮循环无重复节点,则将倒数第一个无重复节点赋值给倒数第二个无重复节点 secondNode = lastNode; } if (node != null) { lastNode = node; node = node.next; } } return newHead; }
相关文章推荐
- leetcode Remove Duplicates from Sorted List II
- 【leetcode c++】82 Remove Duplicates from Sorted List II
- LeetCode_Remove Duplicates from Sorted List II
- LeetCode | Remove Duplicates from Sorted List II
- [Leetcode] Remove Duplicates from Sorted List II
- 【leetcode】Remove Duplicates from Sorted List II (middle)
- Leetcode:Remove Duplicates from Sorted List II
- LeetCode---(82) Remove Duplicates from Sorted List II
- [leetcode] Remove Duplicates from Sorted List II
- [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
- leetcode 081 —— Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicate from Sorted Linkded List II
- [Leetcode] Remove Duplicates from Sorted List II (Java)
- Leetcode: Remove Duplicates from Sorted List II
- [Leetcode] Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicates from Sorted List、Remove Duplicates from Sorted List II
- 【Leetcode】Remove Duplicates from Sorted List II (Removing)
- [leetcode 82]Remove Duplicates from Sorted List II