文章目录
一、题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
二、我的题解
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
if head == nil { //首先需要判断传入的指针是否空,如果不为空,才进行下面的操作。对空指针操作会产生panic。
return nil
}
//反转链表的过程中需要三个辅助指针
var prev *ListNode //指向当前反转的节点的原前驱节点
var curr *ListNode //指向当前反转的节点
var next *ListNode //指向当前反转的节点的原后驱节点
curr = head
prev = nil //反转头结点时,使其指向 nil
//反转链表
for curr != nil {
next = curr.Next
curr.Next = prev
prev = curr
curr = next
}
head = prev
return head
}
评判结果:
注意:
- 对于传入参数是一个指针的情况,需要先确定指针非空才能进行操作。对空指针操作会产生 panic。
- 反转链表的过程中需要三个辅助指针的帮助。用 curr 指向当前反转的节点,next 记忆当前反转节点的原后驱节点,prev 记忆当前反转节点的原前驱节点。