首页 > 编程知识 正文

c语言单链表反转,单向链表反转c++

时间:2023-05-05 11:43:48 阅读:33496 作者:2904

目录例题记述构想1代码实现构想2代码实现

例题的说明

反转链表

示例:

:1-2-3-4-5-空输出:5-4-3-2-1 -空3358 www.Sina.com /

结构列表节点{ int val; 结构列表*下一步; (;

构想一结构体定义

定义新的头指针并将其标记为新头。 这最初是空的,不是指空的。 最后,我们决定将此新建头指针作为新链表的头指针返回。

是否将节点node定义为“临时中继站”并进行初始化不会有很大影响。 遍历链表中的每个节点,确定head指针是否为空,即是否到达原始链表的末尾。 如果不是空的话,说明还没有到达尾部。 如果程序首次运行时未进入循环,则等于传递了先对原链表做头删操作,再对新链表做头插。 此时,返回新head的新链表的开头指针,同样返回NULL也是合理的。 如果当前指针不是NULL,则开始反向链表逻辑:首先删除原始链表,然后插入新的链表。 也就是说,使用空链表进行操作。 指向传递节点指针的链表的第一个指针head,并保持两个指针的方向相同。

然后,将头指针指向其下一个节点。 此时,旧链表已完成循环操作。 第一个节点已经“断开”。 下一步是对新的链表执行头删操作,将节点放入新的链表中。

使节点指针next中的下一个节点指向新链表的第一个指针newHead,从而完成到节点的链接。 也就是说,头部插入到新的链表中。 然后,更新newHead,使其指向新链表的第一个节点。 进行下一个循环。

8 .如果最终head指针指向原始链表的末尾,则为NULL,退出循环。 此时,新的链表翻转如下。

最终返回新链表的开头指针newHead就可以了。 代码实现struct listnode * reverse list (结构列表* head ) {struct ListNode *newHead=NULL; 结构列表节点*节点; wile (头!=null(//1.从前面的链表开始删除node=head head=head-next; //2 .一头扎进新的链表,节点-下一步=新头新头=节点; }返回新头; )如果使用思路2选择语句找到空链表,则返回空指针。 空链表不能反转,或者即使反转也是空链表,所以返回空。 使用三个指针p0 '前指针'、p1“当前指针”和p2 '后指针'批处理链表元素。 p0设置为NULL,作为链表的末尾节点进行处理。 p1指向旧链表的第一个指针head,p2指向旧链表第一个指针的next节点。

遍历链表,循环判断因子为p1,为空时到达链表末尾退出循环。 否则,以表格形式运行p1所指示的当前节点的下一个节点,即指向上一个节点的循环中逻辑。

此时,如果p0为NULL,则p1的下一个节点为空,当前为最后一个节点。

然后将p0指针指向p1,将p1指针指向p2。 请注意,这两个步骤不能互换顺序。 否则,会正确向后移动一位。 此时,三个指针的交替已完成。 确定p2指针是否为空,如果为空,则指示p2到达链表的末尾,当前指针p1的指针为最后一个节点,其next为空。 如果不为空,则将p2更新为下一个节点,进行下一个循环。

下一次循环时,断开连接节点将链接到新链表的开头,同时更新三个指针。 继续循环。

循环的结束条件是,p1指向链表末尾的空值,p1前面的指针p0指向反转的链表,它是新链表的头指针。 此时,回到p0就可以了。 代码实现struct listnode * reverse list (struct listnode * head ) if ) head==null ) {返回空值; }结构列表* P0=null; 结构列表* P1=head; 结构列表* p2=头下一步; wile(P1!=null(P1-next=P0; p0=p1; p1=p2; if(p2!=null(P2=P2-next; } }返回P0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。