链表实现反转

链表是一种数据结构,可以用一个常见的比喻来理解。想象一下,你有一串珠子,每个珠子上都有一个小标签,上面写了一些信息(比如数字或字母)。这些珠子通过一根线串在一起,每颗珠子都只知道自己后面紧挨着的那一颗珠子在哪里,而不知道其他珠子的位置。

具体来说:

  • 头节点:就像这串珠子的第一颗珠子
  • 尾节点:就是最后一颗珠子,它没有后面的珠子相连。
  • 节点:每一颗珠子就是一个节点,每个节点包含两部分:一部分是存储的信息(数据域),另一部分是指向下一个节点的指针(指针域)。

当你想要找到某个特定位置的珠子时,需要从第一颗珠子开始,沿着线依次查看每颗珠子上的标签,直到找到你要的那个。这种方式在某些情况下效率较低,因为可能需要检查很多个节点才能到达目标节点。但是,插入和删除操作相对简单快捷,因为只需要调整相邻节点之间的连接即可。

class ListNode(object):
    """
    链表节点类,包含一个值和一个指向下一个节点的指针
    """

    def __init__(self, val=0, next=None):
        """
        初始化链表节点
        :param val: 节点的值,默认为0
        :param next: 下一个节点,默认为None
        """
        self.val = val
        self.next = next


class Solution(object):
    """
    解决方案类,提供链表反转的功能
    """

    def reverseList(self, head):
        """
        反转链表
        :type head: Optional[ListNode] 链表的头节点,可能为None
        :rtype: Optional[ListNode] 反转后的链表头节点,可能为None
        """
        prev = None  # 初始化前一个节点指针为None
        current = head  # 初始化当前节点指针为链表头
        print("初始状态: prev=None, current=", current, sep='')
        while current:
            next_node = current.next  # 保存当前节点的下一个节点
            print("当前节点:", current, "下一个节点:", next_node)
            current.next = prev  # 将当前节点的next指向前一个节点,实现反转
            print("反转后: 当前节点的next指向前一个节点", prev)
            prev = current  # 前一个节点指针向后移动
            print("更新: prev=", prev, "current=", next_node, sep='')
            current = next_node  # 当前节点指针向后移动
            print("新的当前节点:", current)
        return prev  # 返回反转后的链表头


def print_linked_list(head):
    """
    打印链表
    :param head: ListNode 链表的头节点
    """
    current = head
    while current:
        print(current.val, end=" ")  # 打印当前节点的值
        current = current.next  # 移动到下一个节点
    print()  # 打印换行


if __name__ == "__main__":
    # Create a linked list: 1 -> 2 -> 3 -> 4 -> 5
    # 创建链表:1 -> 2 -> 3 -> 4 -> 5
    node5 = ListNode(5, None)
    node4 = ListNode(4, node5)
    node3 = ListNode(3, node4)
    node2 = ListNode(2, node3)
    head = ListNode(1, node2)

    print("原始链表:")
    print_linked_list(head)

    # Reverse the linked list
    # 反转链表
    solution = Solution()
    reversed_head = solution.reverseList(head)

    print("反转后的链表:")
    print_linked_list(reversed_head)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值