链表逆置的两种方法

这篇具有很好参考价值的文章主要介绍了链表逆置的两种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原链表图:

链表逆置,每日一学,链表,数据结构 

方法一:头插法链表逆置

1.断开头节点与其他节点的连接(提前存好head->next的地址)

    Node* p = head->next;

    Node* q = p->next;

    head->next = NULL;链表逆置,每日一学,链表,数据结构

2. 头插法在head后面插入p后链表的各个节点

    p->next = head->next;

    head->next = p;

p、q指针往后移

    p = q;

    if (q != NULL)

          q = q->next;

链表逆置,每日一学,链表,数据结构

3. 依此类推直到全部插入,链表逆置完成

链表逆置,每日一学,链表,数据结构

完整代码:

void R_head(List head)
{
	assert(head != NULL);
	if (head == NULL)
		return;
	if (GetLength(head) <= 1)
		return;
	Node* p = head->next;
	Node* q = p->next;
	head->next = NULL;
	while (p != NULL)
	{
		p->next = head->next;
		head->next = p;
		p = q;
		if (q != NULL)
			q = q->next;
	}
	return;
}

 方法二:三个指针直接逆置

1.设置三个指针分别指向head后面的三个节点

    Node* p = head->next;

    Node* q = p->next;

    Node* r = q->next;

链表逆置,每日一学,链表,数据结构

2. p第一个指向的节点(head->next)的指针域赋为空

    p->next = NULL;

链表逆置,每日一学,链表,数据结构

3. 把q的next指向q,然后p,q,r往后移(r是为了存逆置前q的next)

        q->next = p;

        p = q;

        q = r;

        r = r->next;

链表逆置,每日一学,链表,数据结构

4. 当r指向空时,不再后移,将head的next指向q

    q->next = p;

    plist->next = q;

链表逆置,每日一学,链表,数据结构

 完整代码:

void R(List head)
{
	assert(head != NULL);
	if (head == NULL)
		return;
	if (GetLength(head) <= 1)
		return;
	Node* p = head->next;
	Node* q = p->next;
	Node* r = q->next;
	p->next = NULL;
	while (r != NULL)
	{
		q->next = p;
		p = q;
		q = r;
		r = r->next;
	}
	q->next = p;
	head->next = q;
}

三指针相对复杂。

如果链表长度为1或0则不需要逆置直接return。文章来源地址https://www.toymoban.com/news/detail-597340.html

到了这里,关于链表逆置的两种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PPT设置“只读模式”的两种方法

    想要防止PPT文件被意外更改,或者禁止他人随意更改,我们可以给PPT设置保护模式,而PPT的“只读模式”就起到了这样的作用。 ​具体的设置方法有两种,我们可以根据不同需求选择合适的方法。 方法一: 防止意外更改,起提醒作用,我们只需设置没有密码的“只读模式”

    2024年02月04日
    浏览(48)
  • Falsh 发送图片的两种方法

    当使用flask框架的时候,去发送和接收图片,但是官方的是只有一个save方法,只能保存到本地在读取,那我岂不是还得再读出来,这多麻烦 Post发送图片 方式一 方式二 Flask接收图片 方式一 方式二 方式三

    2024年02月11日
    浏览(39)
  • java关闭流的两种方法

    当使用完流后,关闭所有打开的流仍然是一个好习惯。一个被打开的流有可能会用尽系统的资源,这取决于平台和实现。如果没有将流关闭,另一个程序试图打开另一个流时,可能会得到不需要的资源。 有两种关闭方式: ​ 如下: jdk1.7之前 方法一:手动关闭,即为使用c

    2024年02月13日
    浏览(36)
  • PPT“放映模式”的两种设置方法

    做好的PPT文件要如何放映呢?下面来说说设置PPT放映模式的两种方法。 方法一,直接在PPT文件里设置播放幻灯片。 1、打开PPT后,点击菜单栏【幻灯片放映】选项下的【设置幻灯片放映】。   2、弹出对话框后,根据需要选择不同放映方式,如幻灯片放映的页数、“手动放映

    2024年02月05日
    浏览(43)
  • 查看 WiFi 密码的两种方法

    突然忘记 WiFi 密码怎么办? 想连上某个使用过的 WiFi,但有不知道 WiFi 密码怎么办? 使用电脑如何查询 WiFi 密码? 以下是我知道的两个使用电脑查看 WiFi 密码的方法,希望对你有所帮助; 在电脑上打开 控制面板 ; 点击 网络和internet 》 网络和共享中心 》 查看网络状态和任

    2024年02月09日
    浏览(41)
  • 解除Excel限制编辑的两种方法

    Excel被限制编辑,是很容易看得出的,一般会出现不能编辑,不能复制粘贴、打印等操作,也会出现下面提示。 还有一种限制是设置成只读模式,在打开Excel表格时就会出现提示。   我们可以根据不同的限制设置,用以下两种方法来解除。 首先,我们可以看下Excel表格中【审

    2024年02月10日
    浏览(83)
  • RabbitMQ实现延时消息的两种方法

    1、死信队列 1.1消息什么时候变为死信(dead-letter) 消息被否定接收,消费者使用basic.reject 或者 basic.nack并且requeue 重回队列属性设为false。 消息在队列里得时间超过了该消息设置的过期时间(TTL)。 消息队列到达了它的最大长度,之后再收到的消息。 1.2死信队列的原理 当一个

    2024年02月10日
    浏览(41)
  • java 数组新增元素的两种方法

    数组在使用前,长度就已固定,所以原数组长度是不能再改变了,基于此,提供如下两种方式,添加元素数据 1创建一个新数组,长度为原数组加1,然后将原数组数据添加到新数组,最后再添加需要的新数据         String[] s1 = {\\\"a\\\",\\\"b\\\",\\\"c\\\"};         String[] s2 = new String[s1.l

    2024年02月16日
    浏览(39)
  • Linux下安装CMake的两种方法

    方法一:使用包管理器安装CMake 在Linux系统中,可以使用包管理器来安装CMake。不同的Linux发行版可能使用不同的包管理器,下面以常见的Ubuntu系统为例: 打开终端,输入以下命令更新包管理器的软件源信息: 安装CMake: 输入管理员密码确认安装。包管理器将自动下载并安装

    2024年02月04日
    浏览(44)
  • 设置Excel表格“只读模式”的两种方法

    Excel表格的“只读模式”可以帮助我们防止意外更改表格,根据不同需求,表格可以设置“有密码”和“无密码”的两种“只读模式”,下面来说说具体设置方法。 一、无密码“只读模式” 如果主要是想防止自己意外修改了表格,可以设置没有密码的“只读模式”。 打开E

    2023年04月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包