反转链表就是只通过改变指针的指向不开辟新的内存空间来把链表反转。
目录
一、初始化:
cur为第一个结点时,反转后它将会成为最后一个结点,所以它的next要指向None。cur指向第一个结点,pre指向为None。
二、开始反转
- 利用临时变量temp保存后面的链表,因为没有cur.next的指针引用会导致断链,防止断链用tamp保存没处理元素链表的头结点。
- 让cur的next指针指向pre。
- pre指向cur指向的结点
- cur指向temp指向的位置
三、代码实现
class Node:
def __init__(self, value=None, next=None):
self.value, self.next = value, next
class Linklist:
def __init__(self, maxsize=None, value=None):
self.maxsize = maxsize
self.root = Node(value) # 指头结点
self.length = 0
self.tail = None
def reverse_l(self):
per = None # 指向当前结点的前驱结点
cur = self.root # 指向当前结点
while cur is not None:
if cur.next is None: # 最后一个元素
self.root.next = cur # 把头结点的next指向最后一个结点
temp = cur.next # temp用于保存当前元素后一个元素的指针,防止断链
cur.next = per
per = cur
cur = temp
传头指针的版本,只要改动一丢丢
def ReverseList(self, pHead):
# write code here
cur = pHead
pre = None
while cur is not None:
if cur.next is None:
cur.next = pre
return cur
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pHead