一、题目
反转一个单链表
- 示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
二、题解
利用迭代法求解:
- 定义三指针:pre指向空节点、cur指向head(链表第一个节点)、nxt指向cur的下一个节点
- 我们重复以下操作:将cur的next指向pre,然后将三指针均向前移动一步
(定义nxt是为了防止cur改变next后找不到原先的下一个节点而无法进行移动) - 最后当cur移动到空时,pre所在的位置就是反转后链表的head,返回即可。
图示如下:
- 时间复杂度为:
0 ( n ) 0(n) 0(n) - 空间复杂度为:
0 ( 1 ) 0(1) 0(1)
代码
func reverseList(head *ListNode) *ListNode {
//链表为空或者只有一个结点时,返回head
if head == nil || head.Next == nil{
return head
}
//指针定义
var pre *ListNode
cur := head
//当cur不为空时进行循环,改变链表方向
for cur != nil{
nxt := cur.Next
cur.Next = pre
pre = cur
cur = nxt
}
//cur为空,返回pre,即反转后链表的head
return pre
}