力扣206. 反转链表

简介: 力扣206. 反转链表

题目:

给你单链表的头节点 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

分析:

本道题,需要考虑两种情况:

**第一种:**链表为空,反转链表依然是一个空链表。

**第二种:**链表不为空,需要反转:

定义三个指针n1,n2,n3,分别指向NULL,head,head->next

通过n2来遍历链表,n3先到结尾,为空时,此时链表还没有遍历结束,还没有实现全部反转

实现反转:n2->next=n1

将n1移到n2的位置,n2移动到n3的位置,n3往后移动一个节点

n2还不为空,继续遍历,先反转:n2->next=n1

将n1移到n2的位置,n2移动到n3的位置,n3往后移动一个节点


重复此操作,直到n2为空时:

这里需要注意一下:当n2下一个为空时,此时n3已经为空,n3->next也是空,此时n3已经不需要,因此,需要判断一下n3为不为空。


遍历结束后,返回n1即可

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode*n1,*n2,*n3;
    n1=NULL;
    n2=head;
    n3=head->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
        {
            n3=n3->next;
        }
    }
    return n1;
}


目录
相关文章
|
2天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
2天前
LeetCode链表hard 有思路?但写不出来?
LeetCode链表hard 有思路?但写不出来?
|
2天前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
13 4
|
2天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——链表的中间结点
【每日一题】LeetCode——链表的中间结点
|
2天前
|
C++
[leetcode 链表] 反转链表 vs 链表相交
[leetcode 链表] 反转链表 vs 链表相交
|
2天前
【力扣】148. 排序链表
【力扣】148. 排序链表
|
2天前
|
索引
【力扣】142. 环形链表 II
【力扣】142. 环形链表 II
|
2天前
【力扣】19. 删除链表的倒数第 N 个结点
【力扣】19. 删除链表的倒数第 N 个结点

热门文章

最新文章