[JZoffer]反转链表

反转链表

题目描述

输入一个链表,反转链表后,输出链表的所有元素

代码

代码其实虽说看懂了,但是实现起来稍微还是有些困难,理解的不透彻,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

猜你喜欢

转载自blog.csdn.net/sinat_24648637/article/details/80326744