JZ24 反转链表

67 阅读1分钟

[](题解 | #反转链表#_牛客博客 (nowcoder.net))

# 反转链表
# -*- coding:utf-8 -*-
# 创建结点
# 创建结点
class Node:
    def __init__(self, element=None):
        self.element = element
        self.next = None


class Show_Node:
    # 根据输入的列表创建链表
    def single_link(self, list_):
        if not list_:
            return Node()
        for index, value in enumerate(list_):
            if index == 0:  # 首元素的插入
                head = Node(value)
                cur_ = head
            else:  # 后续元素的插入
                cur_.next = Node(value)
                cur_ = cur_.next
        return head

    # 以列表的形式查看链表
    def traverse(self, node):
        list_ = []
        while node is not None:  # 遍历所有节点
            list_.append(node.element)  # 结点元素填入列表
            node = node.next
        return list_

    # 计算链表长度
    def length_link(self, node):
        cur = node
        len_ = 0  # 计数
        while cur is not None:  # 遍历所有节点
            len_ += 1  # 计数
            cur = cur.next  # cur指向下一个节点
        return len_


class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        while not pHead or not pHead.next:
            return pHead
        pre = None
        node = pHead
        while node:
            tmp = node.next
            node.next = pre
            pre = node
            node = tmp
        return pre

show_code = Show_Node()
l = show_code.single_link([1, 2, 3])
s = Solution()
r = s.ReverseList(l)
print(show_code.traverse(r))
print(show_code.length_link(r))