LeetCode 206: 反转链表
🏷️ 链表 | 双指针 | 递归
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:

示例 2:

示例 3:
📝 解题思路
本题较为简单,使用迭代法即可解决。关键是维护三个指针,逐步反转链表中每个节点的指向。
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
if (head==NULL){
return head;
}
struct ListNode* tail=head->next;
struct ListNode* H=head;
struct ListNode* cur=head;
while(tail!=NULL){
head=tail;
tail=tail->next;
head->next=cur;
cur=head;
}
H->next=NULL;
return head;
}
复杂度分析
- 时间复杂度: O(n),其中 n 是链表的长度。需要遍历链表一次。
- 空间复杂度: O(1),只使用常数个指针变量。