编写一个算法将一个单链表逆转,请编写程序将一个单链表反转
Yyds干货库存
在本文中,我将分享一个经典的算法问题————倒链表,并分享多种求解方法,希望对你有所帮助。
倒排链表_ Niuke.com纽克蒂巴
标题:给定一个单链表的头节点pHead(头节点是有价值的,比如下图,它的val是1),长度是n,链表反转后,返回新链表的头。
数据范围:0n1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)。当进入链表{1,2,3}时,
反转后,原来的链表变成了{3,2,1},所以对应的输出是{3,2,1}。
上述转换过程如下图所示:
编辑
示例:输入:{1,2,3}
返回值:{3,2,1}
2示例输入:{}返回值:{}
注意:空链表输出一个空列表。
以下代码经纽克测试,均正确。请随意测试解决方案1:(迭代)解题思路:套
n1=NULL,n2=phead,n3=phead-head;
然后改变链表的方向来反转链表。
N3的功能是保存下一个地址,以免错过下面的链表。
编辑
代码:structlistnode *反向列表(structlistnode * head)
{
struct ListNode *n1=NULL,*n2=head,* n3=head-next;
if(head==NULL head- next==NULL)
返回NULL
其他
{
而(n2)
{
N2-next=n1;//反转
//迭代
n1=n2
n2=n3
如果(n3!=空)
n3=n3-next;
}
返回
结果显示:
编辑
2.解决方法:(头插入)解决思路:建立另一个链表B,利用链表的头插入方法将原链表的头插入到链表B中,然后返回链表B。
编辑
代码:structlistnode *反向列表(structlistnode * head)
{
struct ListNode *cur=head,*next=head- next,* newhead=NULL
而(cur!=空)
{
next=cur-next;
//头部插头
cur-next=new head;
newhead=cur
cur=next
}
返回
结果显示:
编辑
最后
非常感谢你耐心的看完我能坚持写到这里,送上几句话给你我:
1.做一个更好的自己,而不是一个完美的他人。
2.每个人都愿意做自己喜欢的事,但做自己该做的事,这叫成长。
3.活成一个真正有形的人,而不是——摊肉,乱七八糟的情绪。
放弃很容易,坚持下来很爽。
5.知识不是力量,当知识被使用时,它就是力量。
6.人生只有两种选择,要么忙着去死,要么忙着活着!==你能忍,你就优秀;忍不了就out==。你野心太大,没有资格停下来。
最后,如果你觉得我写的不错,请别忘了喜欢,收藏,关注()
* *愿我们一起加油,一起奔向美好的未来。愿我们从一个懵懂的菜鸟逐渐成为老板。加油,夸夸自己!**
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。