剑指offer 24 - 反转链表 - python

76 阅读1分钟

题目描述:

输入一个链表,反转链表后,输出新链表的表头。

思路:

  • 辅助list法: 一种最为简单直接的方法,首先遍历链表获取结点的val列表,然后将val列表反转,最后使用反转后的新val列表构建新的链表,返回新链表表头即可

  • 反转元素法: 遍历链表并将遍历到的元素作为新链表的头结点,直到最后一个结点


    在这里插入图片描述


AC代码

辅助list法

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def ReverseList(self, pHead):
        # write code here
        if pHead == None or pHead.next == None:
            return pHead
        
        number = []
        while pHead:
            number.append(pHead.val)
            pHead = pHead.next
        number.reverse()
        
        newHead = ListNode(-1)
        cur = newHead
        for n in number:
            node = ListNode(n)
            cur.next = node
            cur = cur.next
        
        return newHead.next

反转元素法

# -*- 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 None
        
        newHead = None
        while pHead.next:
            node = ListNode(pHead.val)
            node.next = newHead
            newHead = node
            pHead = pHead.next
        
        node = ListNode(pHead.val)
        node.next = newHead
        newHead = node
        
        return newHead