算法题之链表系列总结
1.链表的创建
头插法和尾插法:头插法是逆序输出,尾插法是正序输出
list1 = [2,3,4,5]
##Node类
class Node:
def __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