《剑指offer》面试题11:反转链表

题目描述

输入一个链表,反转链表后,输出新链表的表头。
 

题目解析:

这个题目的题意其实非常简单,最开始我们的链表的指向是这样的:

 

 将其改变反向,变成如下所示的方向即可:

 

 可以看到最开始我们的表头指向了None,然后表尾却指向了倒数第二个链表,中间的链表指向全部反向,这也就是这个题目要让我们干的事情。那么我们如何实现这个链表的反转呢?

首先我们开辟出一个新的空间nextNode,用于装载还没有实现链表反转的部分,剩余的空间preNode用于装载已经反转的部分,代码如下所示:

class Solution:
    # 返回ListNode,到底要让我返回啥?返回的是新链表的表头,这个链表当中的所有指向已经全部重新排列。
    def ReverseList(self, pHead):
        # write code here、
        preNode=None
        while pHead:
            nextNode = pHead.next#指向下一个内存空间
            pHead.next = preNode#更换指针的指向为前一个内存空间
            preNode=pHead#把当前节点从None变成pHead,
            pHead=nextNode
        return preNode
            

假设我们在做第一步的时候如下图所示:

 

 我们先拿掉phead当中的表头,将其指向preNode也就是None,这样拿掉的这个表头以及已经具备新的指向的表头用preNode来储存,剩下的nextNode变成新的phead,进入到下一步重新进行这个循环。新的循环依然拿掉新的phead的表头将其变换指向后灌入preNode当中,从此往复,就会将整个链表的指向全部反转了。如下图所示:

 

 

 

posted @ 2020-08-17 16:36  Geeksongs  阅读(170)  评论(0编辑  收藏  举报

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.