每日一练——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就成为了头节点

对应代码如下:

ListNode n1,n2,n3;//创建3个结构体类型指针的结点

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

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

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

分析:

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

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

1)还是"三指针"玩法

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

指针 cur = head

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

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


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

结语:

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

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值