1、迭代方法实现链表的反转
思想:主要是需要使用到多个指针进行定位。pre、cur、tmp
第一步:
将pre = None,cur=head,tmp=cur.next
第二步:
将cur.next=pre,pre=cur,cur=tmp,tmp=tmp.next
重复上面的第二步操作,直到cur=None,返回pre
class Node(object):
def __init__(self,val):
self.val = val
self.next = None
class Link(object):
def __init__(self,node = None):
self.head = node
def add(self,val):
'''增加节点'''
node = Node(val)
cur = self.head
if cur == None:
cur = node
return
while cur.next:
cur = cur.next
cur.next = node
def trave(self):
'''遍历链表'''
cur= self.head
while cur:
print(cur.val,end = ' ')
cur = cur.next
print()
def reverse(self):
'''反转链表'''
pre = None
cur = self.head
tmp = cur.next
while cur:
cur.next = pre
pre = cur
cur = tmp
if cur == None:
break
tmp = cur.next
self.head = pre
node = Node(1)
l = Link(node)
l.add(2)
l.add(3)
l.add(4)
l.add(5)
l.trave()
l.reverse()
l.trave()
运行结果:
1 2 3 4 5
5 4 3 2 1
上述代码的复杂度:
时间复杂度为:O(n)
空间复杂度:pre cur tmp三个变量的存储空间花费,复杂度为O(1)
2、使用递归的方法: