链表逆置的两种方法

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

原链表图:

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

方法一:头插法链表逆置

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模板网!

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

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

相关文章

  • pdf转png的两种方法

    背景:pdf在一般公司,没有办公系统,又不是word/wps/Office系统,读不出来,识别不了,只能将其转化为图片png,因此在小公司或者一般公司就需要pdf转png的功能。本文将详细展开。 1、fitz库(也就是PyMuPDF) 直接pip安装PyMuPDF即可使用,直接使用fitz操作,无需其他库。

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

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

    2024年02月11日
    浏览(38)
  • PPT设置“只读模式”的两种方法

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

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

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

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

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

    2024年02月13日
    浏览(36)
  • java 数组添加元素的两种方法

    说在前面 数组在使用前,长度就已固定,所以原数组长度是不能再改变了,基于此,提供如下两种方式,给数组添加数据。具体代码如下 方式一: 创建一个新数组,长度为原数组加1,然后将原数组数据添加到新数组,最后再添加需要的新数据 运行结果 方式二: 先把数组转

    2024年02月11日
    浏览(55)
  • 本地代码上传至github的两种方法

    目录 方法一:使用sourcetree 1. 在github网站上新建一个仓库 2. 复制这个仓库的https地址 3.新建一个空的文件夹,打开sourcetree,选择新建/从URL克隆 4. 点击提交,添加注释 常见问题: 解决方法 方法二:命令行上传代码 1.在github上,建立自己的仓库 2.在待上传的代码文件下,运行

    2024年02月03日
    浏览(37)
  • 取消Excel打开密码的两种方法

    Excel设置了打开密码,想要取消打开密码是由两种方法的,今天分享这两种方法给大家。 想要取消密码是需要直到正确密码的,因为只有打开文件才能进行取消密码的操作 是大家常见的取消方法,打开excel文件之后,然后点击文件 – 信息-- 保护工作簿,点击【用密码进行加

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

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

    2023年04月22日
    浏览(39)
  • 二叉树创建的两种方法(图解)

            目录 一、括号表示法 (1)括号表示法构建二叉树的算法思路及算法实现 (2)图解括号表示法构建二叉树 (3)测试程序  二、扩展二叉树 (1)扩展二叉树构建二叉树的算法思路及算法实现 (2)测试程序         二叉树的创建方法有很多种,在这里我介绍两种

    2024年02月06日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包