版权声明:Tian Run https://blog.csdn.net/u013908099/article/details/85802109
题目2:删除链表中重复的节点
在一个排序后的链表中,如何删除重复的节点?
例:
输入: 1->1->2->3->3
输出: 1->2->3
思路
- 删除就是不让重复节点连入链表,所以将重复的开头和下一位不重复的节点相连即可。双指针,一个指向当前节点,一个指向上一个节点,遍历链表,当遇到重复数字时,前指针不动,后指针后移至不重复节点,将其相连。前指针移至后指针,后指针后移一格,继续。
- 时间复杂度:O(n)
- 空间复杂度:O(1)
代码
思路1:时间复杂度:O(n), 空间复杂度:O(1)
def delete_duplicated_node(head):
"""
:param head: head of ListNode
:return: head
"""
cur = head
pre = None
while cur:
pre = cur
cur = cur.next
while cur and cur.val == pre.val:
cur = cur.next
pre.next = cur
return head
思考
可以在leetcode上测试
leetcode 83. 删除排序链表中的重复元素
题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
cur = head
pre = None
while cur:
pre = cur
cur = cur.next
while cur and cur.val == pre.val:
cur = cur.next
pre.next = cur
return head