剑指offer-反转链表-链表-python

题目描述

输入一个链表,反转链表后,输出新链表的表头。
 
思路很简单:1->2->3->4->5,遍历链表,把1的next置为None,2的next置为1,以此类推,5的next置为4。得到反转链表。需要考虑链表只有1个元素的情况。图中有具体的每步迭代的思路,最后输出pre而不是cur是因为最后一次迭代后cur已经指向None了,而pre是完整的反向链表。
链接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca?f=discussion
来源:牛客网

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        if pHead==None or pHead.next==None:
            return pHead
        pre = None
        cur = pHead
        while cur!=None:
            tmp = cur.next
            cur.next = pre
            pre = cur
            cur = tmp
        return pre

思路2:

将原来所有节点组成一个数组,翻转数组,再将数组中的每个加点连接起来。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        if not pHead:
            return
        res = []
        while pHead:
            res.append(pHead)
            pHead = pHead.next
        res.reverse()
        for i in range(0,len(res)):
            cur = res[i]
            if i == len(res)-1:
                cur.next = None
            else:
                cur.next = res[i+1]
        return res[0]
原文地址:https://www.cnblogs.com/ansang/p/12155122.html