题目链接:https://leetcode.cn/problems/reverse-linked-list/description/
📕题目要求:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
🧠解题思路
方案一:三指针法
创建两个指针进行单链表两结点之间的反转,在创建一个指针进行迭代。
方案二:头插法
创建一个指针rhead指向反转后的链表的尾,结点指针cur来进行头插,next方便进行迭代。
🍭代码示例
方案一代码示例如下:
struct ListNode* reverseList(struct ListNode* head)
{
if(head==NULL)
{
return NULL;
}
struct ListNode* n1 = NULL;
struct ListNode* n2 = head;
struct ListNode* n3 = head->next;
while(n2!=NULL)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3!=NULL)
{
n3 = n3->next;
}
}
return n1;
}
方案二代码示例如下:
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* cur = head;
struct ListNode* rhead = NULL;
while(cur!=NULL)
{
struct ListNode* next = cur->next;
cur->next = rhead;
rhead = cur;
cur = next;
}
return rhead;
}
这就是我对本题的理解,如果大家有更优的解,欢迎交流,一起进步!