剑指offer——python【第15题】反转链表

题目描述

翻转一个链表

样例:给出一个链表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串不串都一样)

当然还有其他方法,挖个坑,下次补上!

posted @ 2018-08-28 11:30  嶙羽  阅读(409)  评论(0编辑  收藏  举报