赞
踩
首先声明下我的题目顺序来源于LeetCode 总结 - 搞定 Linked List 面试题_Bruce_0712的博客-CSDN博客,感谢大佬的思路。
编程语言是python.
目录
- 83 Remove Duplicates from Sorted List
- 82 Remove Duplicates from Sorted List II
解读:
这道题目的需求是考验对于链表基本的删除操作,通过循环找到有重复的节点,进行删除操作即可。在参考不同解法的时候,我发现这里有个有趣的地方,有些解法是使用while loop对重复的数字进行更新,因为可能重复的数字可能有超过两个。而我偏向于下面这种,使用pre来表示和记录重复数字出现的第一次,cur代表后面的节点。
- class ListNode(object):
-
- def __init__(self, val=0):
- self.val = val
- self.next = None
-
-
- class Solution(object):
-
- def remove_duplicate(self, head: ListNode) -> ListNode:
- """
- """
- # base case
- if not head or not head.next: # 出现head是空的或者单个节点的直接返回
- return head
-
- pre, cur = head, head.next
-
- while cur: # 保障链表之中所有的节点都进行遍历
- if cur.val == pre.val: # 剪枝操作当出现重复的,进行节点的更新
- pre.next == cur.next
- cur = cur.next
- else:
- pre = pre.next
- cur = cur.next
-
- return head
解读:这道题目和上一题相比,难度就小了不少,只不过需求从将每个数字都保存一次转变成将出现重复的数字时将该个数字进行删除操作。
- class ListNode(object):
-
- def __init___(self, val=0):
- self.val = val
- self.next = None
-
-
- class Solution(object):
-
- def __init__(self, head: ListNode) -> ListNode:
- """
- """
- if not head:
- return head
-
- dummy = ListNode(0)
- dummy.next = head
- pre, cur = dummy, head
-
- while cur:
- if cur.next.val == cur.val:
- while cur.next and cur.next.val == cur.val:
- cur = cur.next
- pre.next = cur.next # pre.next 指向不同的值
- else:
- pre = pre.next
- cur = cur.next # 对cur的更新,注意
-
- return dummy.next
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。