剑指Offer 24:反转链表
2022年2月20日
一、问题描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
二、问题分析
- 问题的核心在于如何反转链表。
- 由于链表具有单向性,与剑指Offer 06不一样,这边使用更改指针的方向来进行实现。
- 代码的实现机理如下:(a)创建prev指针、curr指针和next指针,分别用以指示前一个节点、当前节点和下一个节点;(b)不断向前更新prev指针、curr指针和next指针,并将原链表的指针方向反向;(c)当遍历原链表后,返回原链表的表尾。
三、解题代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
prev_node = None
curr_node = head
while curr_node:
next_node = curr_node.next
curr_node.next = prev_node
prev_node = curr_node
curr_node = next_node
return prev_node
总结
为实现反转链表,本方法使用prev指针、curr指针和next指针来指示对应的节点,并且不断将原链表的指针反向从而完成反转链表。