关于LeetCode中Remove Duplicates from Sorted List一题的理解
来源:互联网 发布:宽带域名是什么意思 编辑:程序博客网 时间:2024/06/08 02:00
题目如下:
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
这道题还是很有意思的,给定一个已经排好顺序的链表,要求删除链表中所有重复value的元素,这个看example中的例子就应该很清楚了。他有意思的地方在于它是链表,和数组不一样,链表中的元素都是“一个接一个”排列的,使用HashMap那种数据结构解决这个问题就不那么便捷。解决链表类问题基本上都要靠改变“next”指针指向的元素,从而调整整个链表的排列,最后返回原链表头即可。虽然返回的是原链表头,但是通过一些执行一些操作后,整个列表的内容和排列顺序都会变得不同。举个例子,你在大街上牵着链子遛狗,有个小偷把你的名贵狗换成一般狗,但是你牵的链子还是那条链子,但狗已经不是那条狗了。这回先上已Accepted的代码,再解释一下思路:
public ListNode deleteDuplicates(ListNode head) { ListNode temp = head; while(temp!=null&&temp.next!=null){ if(temp.next.val == temp.val){ temp.next = temp.next.next; }else{ temp = temp.next; } } return head; }首先将head赋值给temp,这条语句使temp和head指向了同一个内存地址,现在可以把head理解为链子,temp虽然现在什么也没做,但是等会充当的确是小偷的勾当,temp要将链表扫描一遍,并在扫描的时候进行必要的操作。开始“扫描”链表时要判断temp是不是null,temp的next是不是null,如果temp是null或者temp的next是null,就没有必要进行扫描了(因为此时整个链表只有0个或1个node节点,可以直接返回),直接返回head即可。如果链表的长度大于等于2,就要进行扫描。主要就是判断当前节点(temp)的value值和下一个节点(temp.next)的value值是不是相等,如果相等说明出现了重复,应当将temp.next指向temp.next的next,这个非常好理解,此时temp不向前移动,因为你不知道下一个节点是不是也是相同值的。那什么时候可以进行移动呢?当然就是当前节点的value值和下一个节点的value 值不相等的时候,此时可以放心地将temp移动到下一个节点。举个具体的例子,1->1->2->3,temp最开始的时候在第一个1的位置,一次循环后变成1->2->3,temp还是在第一个节点的位置,只不过她的next变成了2,下一次循环是temp的位置就会变到2这个位置。
然后是评论区中的方法,评论区中有一个人采用了递归的方法解决了这个问题。还是通过例子了解一下思路:有这么一个链表1->(1->2->3->4->4->6),第一个node的next应该指向括号中的链表进行去重复操作后返回的链表头,然后再通过比较和这个表头中value值的大小关系,确定应该返回第一个node还是这个已进行去重复操作后的链表头。即如果不相等,就返回第一个node,相等就返回进行过去重复操作的那个链表头。显然这是一个递归的过程,好了,不多说了,直接看代码,写一写更容易理解:
public ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null)return head; head.next = deleteDuplicates(head.next); return head.val == head.next.val ? head.next : head;}这个题还是很interesting的,开学第二天,又忙了一天的事情啊。
- 关于LeetCode中Remove Duplicates from Sorted List一题的理解
- 【leetcode每日一题】NO83.Remove Duplicates from Sorted List
- leetcode 每日一题 83. Remove Duplicates from Sorted List
- Remove Duplicates from Sorted List :from LeetCode
- Leetcode - List - Remove Duplicates from Sorted List
- [leetcode][list] Remove Duplicates from Sorted List
- [leetcode][list] Remove Duplicates from Sorted List
- LeetCode: Remove Duplicates from Sorted List
- LeetCode: Remove Duplicates from Sorted List II
- [Leetcode] Remove Duplicates from Sorted List
- [Leetcode] Remove Duplicates from Sorted List II
- LeetCode: Remove Duplicates from Sorted List
- LeetCode: Remove Duplicates from Sorted List II
- [Leetcode] Remove Duplicates from Sorted List II
- leetcode 37: Remove Duplicates from Sorted List
- [leetcode] Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicates from Sorted List II
- [LeetCode] Remove Duplicates from Sorted List
- Fast Paxos
- 固定格式的日期 String 转为为一种固定格式的String
- XML 文档结构必须从头至尾包含在同一个实体内
- windows qtcreator+opencv3.1
- Struts2 payload
- 关于LeetCode中Remove Duplicates from Sorted List一题的理解
- c#5.0新增特性
- 原生Base64编码/解码(OC与Swift)
- printk - Log Levels
- CS231n第四课:神经网络1学习记录
- Zookeeper的一致性协议:Zab
- 构造器
- 将MYSQL查出来的数据从三列转化为一列
- pip ssl certificate verify failed