反转链表的两种方法

简介: 反转链表的两种方法

反转链表

原题链接:https://leetcode.cn/problems/reverse-linked-list/

方法一:改变链表中指针的指向

首先定义三个指针 n1 n2 n3 ,指向位置如下:

然后就是一个循环的过程了,每次将n2next指向n1,n2赋给n3,n3指向n3next ,就可以实现n1,n2,n3不断地向后移动,如下图:

注意循环终止的条件 n2为空指针的时候才终止,同时当n3为空指针的时候,不能让n3->next指向空

上面的方法是针对链表不是空链表而设计的,如果是空链表,程序就会出错,此时可以直接返回一个空指针即可

代码:

struct ListNode* reverseList(struct ListNode* head)
{
    if(head==NULL) //如果链表为空,直接返回空指针
    {
        return NULL;
    }
    struct ListNode*n1=NULL,*n2=head,*n3=head->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3!=NULL)
        {
            n3=n3->next;
        }
    }
    return n1;
}


方法二:每次移动链表的数据

这种方法也需要用到三个指针变量,具体步骤和上面类似,如下图:

代码:

struct ListNode* reverseList(struct ListNode* 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;
}
目录
相关文章
|
1月前
|
存储 Java
HashMap之链表转红黑树(树化 )-treefyBin方法源码解读(所有涉及到的方法均有详细解读,欢迎指正)
本文详细解析了Java HashMap中链表转红黑树的机制,包括树化条件(链表长度达8且数组长度≥64)及转换流程,确保高效处理大量数据。
71 1
|
5月前
|
SQL 算法 数据可视化
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
|
6月前
链表的几种常见方法
链表的几种常见方法
25 1
|
存储 C++ 容器
五道超经典题目,带你手撕链表题(多种方法实现)下
五道超经典题目,带你手撕链表题(多种方法实现)
61 1
力扣203移除链表元素:思路分析+代码实现+方法总结(伪头节点法&递归)
力扣203移除链表元素:思路分析+代码实现+方法总结(伪头节点法&递归)
101 0
|
容器
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
165 0
|
6月前
|
存储 Java
【链表的说明、方法---顺序表与链表的区别】
【链表的说明、方法---顺序表与链表的区别】
64 0
|
6月前
【数据结构】双向链表中删除节点的方法实现(代码+详解)
【数据结构】双向链表中删除节点的方法实现(代码+详解)
239 0
|
11月前
|
存储 程序员 API
数据结构单链表之查看数组与链表的方法 | 第六套-2
数据结构单链表之查看数组与链表的方法 | 第六套-2
92 0
|
11月前
|
存储 数据可视化 索引
数据结构单链表之查看数组与链表的方法 | 第六套-1
数据结构单链表之查看数组与链表的方法 | 第六套-1
63 0