链表总结(基于python)

1.单向链表的反转(迭代)

class ListNode:
	def __init__(self, x):
		self.val = x
		self.next = None

def inverse(head):
	r = None
	p = head
	while p != None:
		q = p
		p = p.next
		q.next = r
		r = q
	return q

	# q = None
	# p = head
	# while p != None:
	# 	r = q
	# 	q = p
	# 	p = p.next
	# 	q.next = r
	# return q

if __name__ == '__main__':
	nodes = [1,2,3,4]
	# 构建链表
	head = ListNode(nodes[0])
	ptr = head
	for x in nodes[1:]:
		node = ListNode(x)
		ptr.next = node
		ptr = ptr.next

	# 遍历链表
	point = head
	while point != None:
		print(point.val, end = "\t")
		point = point.next
	print("\n")

	# 反转后打印链表
	reversed_head = inverse(head)
	while reversed_head != None:
		print(reversed_head.val, end = "\t")
		reversed_head = reversed_head.next

2. 单向链表反转(递归)

前面非递归方式是从前面数1开始往后依次处理,而递归方式则恰恰相反,它先循环找到最后面指向的数5,然后从5开始处理依次翻转整个链表。

首先指针H迭代到底如下图所示,并且设置一个新的指针作为翻转后的链表的头。由于整个链表翻转之后的头就是最后一个数,所以整个过程NewH指针一直指向存放5的地址空间

在这里插入图片描述
然后H指针逐层返回的时候依次做下图的处理,将H指向的地址赋值给H->next->next指针
在这里插入图片描述
继续返回操作:
在这里插入图片描述
递归程序

data = [1,2,3,4,5,6]

class ListNode:
	def __init__(self, val):
		self.val = val
		self.next = None

# 构建链表
head = ListNode(data[0])
ptr = head
for val in data[1:]:
	node = ListNode(val)
	ptr.next = node
	ptr = ptr.next

# 链表反转
def inverse(head):
	if head == None or head.next == None:
		return head
	# 一直循环到链尾
	newHead = inverse(head.next)
	# 翻转链表指向
	head.next.next = head
	head.next = None
	return newHead

# 打印链表
newHead = inverse(head)
while newHead != None:
	print(newHead.val, end="\t")
	newHead = newHead.next

输出

6	5	4	3	2	1	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值