反转链表
题目描述
输入一个链表,反转链表后,输出链表的所有元素
代码
代码其实虽说看懂了,但是实现起来稍微还是有些困难,理解的不透彻,mark在这里,以备之后查看之
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
if not pHead: # 注意程序鲁棒性
return None
pReserve = None # 新链表的头指针
pNode = pHead # 当前指针
pPre = None # 当前指针的前一个结点
while pNode: # 当前结点不为空时才执行
pNext = pNode.next # 链断开之前一定要保存断开位置后边的结点
if not pNext: # 当pNext为空时,说明当前结点为尾节点
pReserve = pNode
pNode.next = pPre # 指针反转
pPre = pNode
pNode = pNext
return pReserve
其中pNode指针反转,每一个pNode指针指向了pPre指针也就是它的链表中的上一个结点
- pReserve为新链表的结点,最后将原链表指针从尾结点复制给pReserve
- pNext为当前结点的下一结点,每次循环都将pNode的下一结点复制给pNext
- pNode.next = pPre 指针反转,原本指向pNext, 现在指向pPre,意义是将当前结点的指针指向当前结点的前一个节点
- pPre为原链表pNode当前结点的前一个结点,每次循环将当前结点pNode复制给pPre
- pNode为当前结点,每次循环都将pNext复制给pNode