[leet code] Remove Duplicates from Sorted List II
来源:互联网 发布:关于配色的软件 编辑:程序博客网 时间:2024/05/21 19:45
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
.
====================
Linked list problems are strait forward as long as we draw the examples before coding. From the example of 1->2->3->3->4->4->5, if we can examine the list node one by one, we can find that only the node with value != its previous node and next node would be exist in the resulting link list. According to this idea, we can set up 3 pointers, one pointer is for the resting linked list, the other two are for the node value compare (i.e. compare the current node value with its previous node and next node).
Note that Pointer of resulting link list will be move only when the distinct number found. While the current node pointer and its previous node pointer right shift 1 step in each iteration.
Now we have the main algorithm, but we also need to consider the special cases: case of current node is head of the linked list, and the case that current node is the end of the link list.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null || head.next==null) return head; ListNode fakeHead = new ListNode(0); // for resulting linked list returning fakeHead.next = head; ListNode rsNode = fakeHead; // pointer of resulting linked list ListNode preNode = null; // pointer of previous node ListNode currNode = head; // pointer of current node while(currNode != null){ if (currNode == head){ // 1st node case if(currNode.val!= currNode.next.val){ rsNode.next = currNode; rsNode=rsNode.next; } } else { // non 1st node if(currNode.next == null){// last node case if(preNode.val != currNode.val) rsNode.next = currNode; else rsNode.next = null;// don't forget!! } else{ // non 1st or last node if(preNode.val!=currNode.val && currNode.val!=currNode.next.val) {// distinct node rsNode.next = currNode; rsNode = rsNode.next; } } } preNode = currNode; currNode = currNode.next; } return fakeHead.next; }}
- [leet code] Remove Duplicates from Sorted List II
- [leet code] Remove Duplicates from Sorted List
- [leet code] Remove Duplicates from Sorted Array I & II
- 【Leet Code】80. Remove Duplicates from Sorted Array II---Medium
- [leet code] Remove Duplicates from Sorted Array
- CODE 50: Remove Duplicates from Sorted List II
- leetcode 日经贴,Cpp code -Remove Duplicates from Sorted List II
- Leet Code OJ 83. Remove Duplicates from Sorted List [Difficulty: Easy]
- 【Leet Code】26. Remove Duplicates from Sorted Array---Easy
- 【LEET-CODE】26. Remove Duplicates from Sorted Array
- CODE 51: Remove Duplicates from Sorted List
- remove-duplicates-from-sorted-list Java code
- LeetCode: Remove Duplicates from Sorted List II
- 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
- github 新手使用记录
- WPF资源路径详细概念详解
- 使MySQL对表名不区分大小写
- A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Ecl
- 经济小故事
- [leet code] Remove Duplicates from Sorted List II
- 二度驯服Trivia烂代码:bjdp.org第13次编程道场即将开始
- 浅析ldd命令
- 嵌入式入门需要会的几个linux命令和知识
- 为什么要get( int field)? 为什么不直接 getDay_Of_Week() ??
- android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
- Chrome经常遇到的问题:字体重排
- 木块砌墙---解题报告
- 学习Java12