• 《剑指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当中,从此往复,就会将整个链表的指向全部反转了。如下图所示:

  • 相关阅读:
    jdk.jre.jvm 三者之间的关系?
    SQL7
    SQL6
    sql题
    sql题
    sql
    简说SQL题
    递归算法
    JAVA的简单描述
    第一篇技术博客
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13518468.html
Copyright © 2020-2023  润新知