题目描述
输入一个链表,反转链表后,输出新链表的表头。
题目解析:
这个题目的题意其实非常简单,最开始我们的链表的指向是这样的:
将其改变反向,变成如下所示的方向即可:
可以看到最开始我们的表头指向了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当中,从此往复,就会将整个链表的指向全部反转了。如下图所示: