给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
题目分析
这道题要求我们反转链表,常规思路我们可能要在创建一个链表,但使用双指针的话在原指针中进行操作即可。
解题思路
我们首先定义俩个节点,curr节点位于头指针的位置,因为反转后原来的头指针指向NULL,所以另一个指针指向为NULL,然后在循环的过程中,curr指针和prev向后移动,先定义一个节点等于curr指向的下一个节点,然后让curr指向prev节点,然后再把prev节点向后移一个,然后令curr = next,直到curr= null,循环结束,此时prev指向最后一个节点,也就是反转后的头节点,我们输出prev即可
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* prev = NULL;
struct ListNode* curr = head;
while(curr) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}