题目难度:《简单》
(1)题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2:
输入:head = [1,2]
输出:[2,1]
示例3:
输入:head = [ ]
输出:[ ]
LeetCode链接:206. 反转链表
(2)解题思路
1)解法1:调整节点指针的方向
- 定义一个指针 cur,用来遍历链表
- 定义一个指针 prev,保存 cur 的上一个节点的位置,初始指向 NULL
- 定义一个指针 next,保存 cur 的下一个节点的位置,用来迭代
- 通过 prev 和 cur 来调整每个节点指针的方向,next 进行迭代
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* cur = head;
while(cur != NULL)
{
struct ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
head = prev;
return head;
}
2)解法2:头插法
- 然后把链表中的所有节点依次头插到一个新链表中,相当于反转了原链表
- 定义一个指针 cur,用来遍历原链表
- 定义一个指针 next,保存 cur 的下一个节点的位置
- 定义一个指针 newhead,指向新链表的头节点
struct ListNode* reverseList(struct ListNode* head){
if(head == NULL || head->next == NULL)
{
return head;
}
struct ListNode* newhead = NULL;
struct ListNode* cur = head;
while(cur)
{
struct ListNode* next = cur->next;
cur->next = newhead;
newhead = cur;
cur = next;
}
return newhead;
}
大家快去动手练习一下吧!
|