24. 反转链表
题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
1 2 |
|
限制:
\(0\) \(≤\) 节点个数 \(≤\) \(5000\)
遍历
时间复杂度\(O(n)\) 空间复杂度\(O(1)\)
定义前驱结点为pre
,当前结点为cur
,由于每次反转需要把当前结点的next指针指向前驱结点pre
,所以需要再定义一个next
用来存储当前结点的下一个结点。
反转操作:
- 把当前结点的
next
指针指向前驱结点; - 把前驱结点
pre
移到当前结点cur
上; - 把当前结点
cur
移到之前定义的next
结点处。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
递归
时间复杂度\(O(n)\) 空间复杂度\(O(n)\)
定义tail
结点为reverseList(head)
函数的返回值。当没有next
结点时,返回head
结点。
否则,将当前结点的next
结点的next
指向当前head
结点,head->next
置为空指针nullptr
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|