算法每日一题(反转单链表)C语言版

简介: 算法每日一题(反转单链表)C语言版

 在本篇文章里,我将分享一道很经典的算法题———反转链表,并且分享多种方法去解决方法,希望可以帮助到你😀😀😀

反转链表_牛客题霸_牛客网

题目描述:

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0≤n≤1000

要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

image.gif编辑

示例1:

输入:{1,2,3}

返回值:{3,2,1}

示例2

输入:{} 返回值:{}

说明:空链表则输出空

以下代码均经过牛客测试,均正确,请放心测试😊😊😊

解法1:(迭代)

解题思路:

n1=NULL,n2=phead,n3=phead->head;

image.gif

然后将链表的导向改变就可以进行链表的反转了👌

n3的作用是保存下一个地址,避免找不到后面的链表

image.gif编辑

代码:

struct ListNode* ReverseList(struct ListNode* head)
{
    struct ListNode *n1=NULL,*n2=head,*n3=head->next;
    if(head==NULL&&head->next==NULL)
    return NULL;
    else
    {
        while(n2)
        {
            n2->next=n1;//反转
            //迭代
            n1=n2;
            n2=n3;
            if(n3!=NULL)
            n3=n3->next;
        }
        return n1;
    }
}

image.gif

结果展示:

image.gif编辑

解法2:(头插)

解题思路:

再设一个链表B,利用链表的头插法将原链表头插到链表B上,继而return 链表B即可

image.gif编辑

代码:

struct ListNode* ReverseList(struct ListNode* head)
{
    struct ListNode *cur=head,*next=head->next,*newhead=NULL;
    while(cur!=NULL)
    {
        next=cur->next;
        //头插
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

image.gif

结果展示:

image.gif编辑

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:

> 1.做==更好的自己==,而不是完美的别人。

> 2.谁都愿意做自己喜欢的事情,可是,做你该做的事情,才叫成长。

> 3.活成一个真正有形的人,而不是—摊肉、一团混乱不堪的情绪。

> 4.放弃很容易,但坚持—定很酷。

> 5.知识不是力量,知识用起来才是力量。

> 6.人生只有两个选择,要么忙着死,要么忙着活! ==熬得住就出众,熬不住就出局==,你的野心很大,所以没资格停下。

最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)

**愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!**

目录
相关文章
|
2天前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
6天前
|
算法 C语言
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
|
12天前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
29 7
|
8天前
|
算法 Java C语言
Java中的算法与C语言中的函数
Java中的算法与C语言中的函数
9 2
|
2天前
|
存储 算法 搜索推荐
【数据结构和算法】--- 基于c语言排序算法的实现(2)
【数据结构和算法】--- 基于c语言排序算法的实现(2)
4 0
|
2天前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
2天前
|
算法 C语言
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
|
2天前
|
存储 人机交互 C语言
【C语言项目实战】使用单链表实现通讯录
【C语言项目实战】使用单链表实现通讯录
|
2天前
|
存储 算法 C语言
【数据结构与算法】深入理解 单链表
【数据结构与算法】深入理解 单链表
|
2天前
|
搜索推荐 算法 C语言
【数据结构和算法】--- 基于c语言排序算法的实现(1)
【数据结构和算法】--- 基于c语言排序算法的实现(1)
10 0