【数据结构】C语言算法练习题——利用“逐次头插操作”去进行反转单链表

题目链接:

力扣https://leetcode.cn/problems/reverse-linked-list/description/

解题思路:

在原有的内存结构基础上(即不开辟新的内存空间),通过遍历整个单链表进而逐步实现“ 头插 ”

参考代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseList(struct ListNode* head)
{
   struct ListNode *cur = head;
   struct ListNode *newhead = NULL;
   while (cur)
   {
       struct ListNode *Next = cur->next;
       cur->next = newhead;
       //cur = newhead;易错点,顺序不能颠倒
       newhead = cur;
       cur = Next;
       
   }

   return newhead;
}

代码解读:

1. 首先需要俩个结构体指针 cur 与 newhead

其中 cur 的作用是遍历整个单链表,所以它的初始化值为头结点的地址

newhead 的作用是在最后返回新的头结点,所以它的初始值为 NULL

2. 在 cur 进行遍历时,从第一个结点开始,因为是逐步地进行 “ 头插 ” ,所以先要保存当前结点的下一个结点的地址,然后 newhead 的值要被赋给每一个进行头插操作结点中的指针域,

因为随着多次头插的操作,newhead 的值也需要改变,而它的改变就需要每一次 cur 的加1得到的新值被赋给 newhead 

而 cur 之所以能够向后逐渐遍历,则是因为前面保存了当前结点的下一个结点 的地址,所以将这个值赋给 cur 

解题方法二:

改变俩俩结点的指针,使其指向相反的方向 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值