day1/力扣/代码随想录/链表

反转链表

null→1(head)→2→3→4→5→null
解法1:双指针解法
①初始化:
pre = null,cur = head
还需要temp指针用于保存cur指针的下一结点,否则当结点反转时,cur指针无法后移到下一结点。
②明确循环停止条件:
最后一步应该是:pre = 4,cur = 5
下一步应该退出循环,不满足循环条件:pre = 5,cur = null
所以循环条件可以是:cur != null

class Solution:
	def reverseList(self,head):
		pre = null 
		cur = head
		while(cur != None):
			temp = cur.next
			cur.next = pre  # 反转
			pre = cur
			cur = temp
		return pre  # 此时head=5,顺着打印出来

解法2:递归解法

class Solutiondef reverse(self,pre,cur):
		if(cur == None):
			return pre
		temp = cur.next
		cur.next = pre
		pre = cur
		cur = temp
		return self.reverse(pre,cur)
	def reverseList(self,head):
		return self.reverse(None,head)  # 初始化

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

无虚拟头结点
①判断头结点是否需要删除:【7,7,7】,val=7;【7,6,8】,val=7;【7】,val=7
②判断其它结点是否需要删除:【6,7,7,8】,val=7

class Solution:
	def removeVal(self,head,val):
		while head.next and head == val:  # while:当头结点=val,下一结点也=val
			head = head.next
		if(head == None):  # 当链表都被移除,返回None
			return head
		cur = head
		while cur.next:
			if(cur.next == val):  # 当两个val相邻时,移除一个后应该接着判断下一结点是否等于val
				cur.next = cur.next.next
			else:
				cur = cur.next
		return head

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点

快慢指针法

定义一个快指针和一个慢指针,快指针后移n步,接着快慢指针一起后移,当快指针后移到尾结点时,慢指针在倒数第n+1的位置。
首先创建一个虚拟头结点,好处:
①方便删除第一个结点

class Solution:
	def removeNth(self,head,n):
		fast = dummyNode(next = head)
		slow = dummyNode(next = head)
		for i in range(n):
			fast = fast.next 
		while(fast.next):
			fast = fast.next
			slow = slow.next
		slow.next = slow.next.next
		return dummyNode.next
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石头猿rock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值