• OJ题之反转链表


    𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

          ⸝⋆   ━━━┓
         - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
    ┗━━━━━━━  ➴ ⷯ

    本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

    👑💎💎👑💎💎👑 
    💎💎💎自💎💎💎
    💎💎💎信💎💎💎
    👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

    👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
    👑👑👑💎👑👑👑


    目录

    一:题目

    二:解题思路分析


    一:题目

    hello ~~~每日一练的分享来了。

    今天up主将为大家分享一个 OJ题之反转链表

    想小试牛刀一把的,阔以try一下

    二:思路分析
    方法一:在原链表基础上进行改变(改变指针走向)

    1.思路的讲解:对于原链表我们只需改变指针的指向形象化理解即:箭头)即可,注意我们只需要在原链表的基础上进行变动即可

    那么问题就来了,我们如何实现此操作?

    “三指针”方法

    1)首先我们创建3个指针变量

    2)其次我们让n1 指向NULL,n2指向第一个结点,n3指向第二个结点

    3) 注意我们这是在原链表的基础上进行变动的
        最终我们只需让原链表的尾结点成为新的头节点

       其实就是这三个结点依次后移,直至  指针n2为空 

     分析如下:

     

     

    最后一次循环对应的草图:

    n1就成为了头节点

    对应代码如下:

    1. ListNode n1,n2,n3;//创建3个结构体类型指针的结点
    2. n1 = NULL,n2 = head,n3 = head->next;

    OJ 答题方式:完整代码如下

    1. typedef struct ListNode* ListNode;
    2. struct ListNode* reverseList(struct ListNode* head){
    3. if(head == NULL)//头节点可能为空
    4. {
    5. return NULL;
    6. }
    7. ListNode n1,n2,n3;//创建3个结构体类型指针的结点
    8. n1 = NULL,n2 = head,n3 = head->next;
    9. while(n2)
    10. {
    11. //注意我们这是在原链表的基础上进行变动的
    12. //最终我们只需让数据5对应的结点成为新的头节点
    13. //所以这里我们就需要让n1这个结点进行循环移动
    14. n2->next = n1;
    15. n1 = n2;
    16. n2 = n3;
    17. if(n3)
    18. n3 = n2->next;
    19. }
    20. return n1;
    21. }
    方法二:利用头插的思想进行反转 

    分析:

    此问题可以等价于把数据1,2,3,4,5进行头插,头插之后不就是5,4,3,2,1

    而且每次图插进来的数据都是对应的新的头节点

    1)还是"三指针"玩法

    指针rhead = NULL(对应的头节点)

    指针 cur = head

    在头插之前需要先保留一下cur的下一个结点  :指针 next= cur->next

    2)注意这里不需要对头节点进行判空的操作,若为空直接返回rhead

    1. //方法二:利用头插的思想,不用判断head是否为空
    2. struct ListNode* rhead = NULL,*cur = head;
    3. while(cur)
    4. {
    5. struct ListNode* next = cur->next;//头插之前先保留cur的下一个结点
    6. cur->next = rhead;
    7. rhead = cur;//头节点更新
    8. cur = next;
    9. }
    10. return rhead;

    结语:

    各位老铁们既然都来到这了,咱一波关注走起,顺便动动小手点个赞,您的支持是我前进的动力,蟹蟹,看到必回

  • 相关阅读:
    【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
    MyBatisPlus(九)模糊查询
    中介子方程二十九
    淘宝店铺订单解密接口/淘宝店铺订单插旗接口/淘宝店铺订单交易接口/淘宝店铺商品上传接口/淘宝店铺订单明文接口/代码对接分享
    【论文】Poly-yolo: 改进anchor分配问题
    QPushButton按钮用法
    LeetCode19.删除链表的倒数第N个结点
    修复中间件log4j漏洞方案(直接更换漏洞jar包)
    《Vue入门到精通系列之五》--- vue-router详解
    Netty简介及简单客户端/服务端示例代码
  • 原文地址:https://blog.csdn.net/X_do_myself/article/details/133999855