算法题之链表系列总结

算法题之链表系列总结

1.链表的创建
头插法和尾插法:头插法是逆序输出,尾插法是正序输出

list1 = [2,3,4,5]
##Node类
class Nodedef __init__(self,data,next=None):
		self.data = data
		self.next = next
##头插法创建链表		
def create_head(li):
	head = Node(li[0])#头节点
	for i in li[1:]:
		node = Node(i)
		node.next = head
		head = node
	return head

################尾插法创建链表###############
def create_tail(li):
	head = Node(li[0])
	tail = head
	for i in li[1:]:
		node = Node(i)
		tail.next = node
		tail = node
	return head 	

2.翻转链表
解法:链表的翻转其实就是把链表里面所有箭头换个方向,例如对于其中某一结点node1,要把node1指向的节点的链断了连向相反方向,但是这时需要注意在链表中不可随意的去断,每一次断链表都要把其next记录下来,不然就找不到断掉之后的链表部分了。
cur表示当前节点,pre表示cur的前一个节点,tmp用来记录cur断之前的next节点,然后就不断的把cur链断了指向前面节点,然后pre,cur后移重复这个过程。

def rever_list(head): #这里面传的参数表示链表的头部,也就是整个链表,方便理解
	pre,cur = None,head
	while cur:
		tmp = cur.next
		cur.next = pre
		pre = cur
		cur = tmp
	return pre
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值