单链表的逆序(C#)

本文介绍如何在不使用额外存储空间的情况下,用C#将单链表进行原地逆序操作。详细阐述了逆序的思路,包括不包含头结点的逆序、定义新旧表节点、利用辅助变量进行节点调整等步骤,并提供了具体的C#代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:将一个单链表在不占用其他存储空间的情况下进行倒置

要求:

//将单链表中的所有元素倒序
//例如:将a→b→c→d变为d→c→b→a即可

我的做法:

思路:首先我们要想好怎么做,我们不能占用其他的存储空间,所以我们不能new Node(),所以对单链表进行就地逆序是最好的,最快的。
1.逆序的前提是链表长度必须大于1,这个是显而易见的。
2.头结点head不参与逆序,他始终做头结点。
3.定义一个P_new=this.head.next作为最后结果的新表。
4.定义P_old=P_new.next为旧表,用来顺次取元素。
5.此时,为了我们的目的,P_new作为新表应该只有第一个结点,故P_new.next=null作为新表表尾。这样我们就把初始链表三分了(head,P_new,P_old)
6.再定义一个Node q作为变量。
7.循环条件应该设为:P_old不为空,每一个结点都要逆序都要执行循环,而P_old不为空就意味着有结点。
8.循环内部:当P_old不为空时开始循环,先令q=P_old,即旧表第一个结点,以“解放第一个结点”;旧表第一个结点“解放”出来后游标后移;将q的next指向新表的首元结点;此时首元结点为q,所以需要更新结点,令P_new=q。
9.由于新表的首元结点一直在更新,跳出循环的时候P_new和q都指向首元结点,所以把之前一直闲着的head同学拿过来,令head.next=P_new。

算法的代码如下:(c#)

public void Newreversion(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值