手撕C语言题典——反转链表

目录

 前言

一.思路 

1)创建新链表

2)创建三个指针

 二.代码实现 


搭配食用更佳哦~~

数据结构之单单单——链表-CSDN博客

数据结构之单链表的基本操作-CSDN博客

前面学了单链表的相关知识,我们来尝试做一下关于顺序表的经典算法题~

 前言

    反转链表同样也是力扣上一道简单题,适合刚学过单链表的我们更好的理解链表相关知识~当然最好大家可以先去力扣上自己 try 一下~~

206. 反转链表 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-linked-list/description/

一.思路 

 题目不多赘述,只要眼珠子不是喘气的都能看懂

1)创建新链表

   创建新链表的思路和上一篇讲的大同小异,创建两个头尾指针,将原链表的拿过来进行头插就可以将链表反转 ,因为在此题这种方法算不上最简洁的方法,所以也不多赘述,有兴趣的可以去看上一篇的思路,附上链接~

手撕C语言题典——移除链表元素(单链表)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Antigonos/article/details/138647423?spm=1001.2014.3001.5501

2)创建三个指针

 我们创建 n1 n2 n3 三个指针,n1 指向空,n2 指向链表的头节点, n3 指向 n2 的下一个节点,也就是头节点的下一个节点,如此便可逐步翻转。我们让 n2 的 next 指针不再指向 n3,而是指向 n1,然后三个指针依次移动,n1 代替 n2 ,n2 代替 n3,n3指向 n2 的下一个节点:

然后再次重复以上步骤,将 n2 指向 n3 的指针指向 n1,到最后 n3 后面没有下一节点了就可以跳出循环,此时 n1 指针指向的就是新链表的头指针了。

循环完成

 创建三指针的思路就可以理顺了:

  • 让 n2 的 next 指针指向 n1
  • n1 = n2
  • n2 = n3
  • n3 = n3 -> next

 二.代码实现 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {
    //判断为空
    if(head==NULL){
        return head;
    }
    //创建三个指针
    ListNode*n1,*n2,*n3;
    n1 = NULL,n2 = head,n3 = n2->next;
    while(n2){
        n2->next = n1;
        n1 = n2;
        n2 = n3;
        if(n3)
        n3 = n3 -> next;
    }
    return n1;
}

需要注意的是,题目中给了提示: 

我们需要判断链表是否为空,如果为空直接返回头节点就行。

这道题到这就结束啦~是不是还蛮简单的,第二个思路虽然难想一点,但只要理解了代码就非常简洁~~ 

下一篇会接着将另一道有关链表的算法题~~

🎈🎈完结撒花🎈🎈 

相关推荐

  1. C语言

    2024-05-13 02:44:03       43 阅读
  2. C语言

    2024-05-13 02:44:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 02:44:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 02:44:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 02:44:03       82 阅读
  4. Python语言-面向对象

    2024-05-13 02:44:03       91 阅读

热门阅读

  1. MySQL教程-输入查询

    2024-05-13 02:44:03       36 阅读
  2. 【教程】英文字幕批量翻译

    2024-05-13 02:44:03       34 阅读
  3. 【Python】普通字典的定义和使用方式

    2024-05-13 02:44:03       31 阅读
  4. 机器学习:感知机--Perceptron

    2024-05-13 02:44:03       34 阅读
  5. 【Arduino】delay()、millis() 时间函数

    2024-05-13 02:44:03       30 阅读
  6. CodeTop 高频笔试题总结(持续更新)

    2024-05-13 02:44:03       33 阅读
  7. centos常用指令

    2024-05-13 02:44:03       33 阅读