题目描述
翻转一个链表
样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
思路
一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点
设原来的链表是1->2->3,步骤是这样的:
1. 新建空节点:None
2. 1->None
3. 2->1->None
4. 3->2->1->None
解答
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回ListNode def ReverseList(self, pHead): if not pHead or not pHead.next: return pHead newHead = None while pHead is not None: temp = pHead.next pHead.next = newHead newHead = pHead pHead = temp return newHead
详细复述一下代码:
在第一轮循环里:首先定义新链表头节点newHead,然后保存原头节点的下一个节点(2)为temp,然后让原头节点(1)指向newHead(空),此时1和2的链条断了;接着让newHead变成了原头
节点(1),最后把原头节点变成了temp(2),看看这轮下来有什么改变,其实是让newHead变成了1,并且指向了None,而pHead变成了2;
接着第二轮循环,可想而知这一轮的目的是让newHead变成2,并且指向1,让pHead变成3
最后的结果就是newHead变成了3,3->2->1->None依次串起来了(最后那个None串不串都一样)
当然还有其他方法,挖个坑,下次补上!