链表删除-leetcode19. 删除链表的倒数第 N 个结点

leetcode19. 删除链表的倒数第 N 个结点

解题重点:
1.删除结点需要定位到被删除结点的前一个结点
2.倒数第N个结点可转化为顺数第Length-N个结点

class Solution: 
	def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: 
		empty = ListNode() 
		empty.next = head 
		p,q = empty,head 
		while n: 
			n -= 1 
			q = q.next 
		while q: 
			q = q.next 
			p = p.next 
		p.next = p.next.next 
		return empty.next

leetcode 83. 删除排序链表中的重复元素

解题重点:
1.注意是排序链表,根据排序链表可知重复元素一定近邻
2.头节点肯定是动不了,不用虚拟头节点

	class Solution: 
		def deleteDuplicates(self, head: ListNode) -> ListNode:
			if not head:return None 
			fast,slow = head,head 
			while fast: 
				if fast.val != slow.val: 
					slow.next = fast 
					slow = slow.next 
				fast = fast.next 
			slow.next = None 
			return head

leetcode 82. 删除排序链表中的重复元素 II

解题重点:
1.删除有重复的元素,则head结点有可能也会被删除,需要加虚拟头节点
2.指针临近的时候不用跳越(不需要slow.next = fast.next)

class Solution: 
	def deleteDuplicates(self, head: ListNode) -> ListNode: 
		empty_head = ListNode() 
		empty_head.next = head 
		pre,cur = empty_head,head 
		while cur: 
			while cur.next and cur.val == cur.next.val: 
				cur = cur.next 
			if pre.next == cur: 
				pre = pre.next 
			else:
				pre.next = cur.next 
			cur = cur.next 
		return empty_head.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值