𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇: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;
各位老铁们既然都来到这了,咱一波关注走起,顺便动动小手点个赞,您的支持是我前进的动力,蟹蟹,看到必回