C 单向链表排序_单向链表排序java

C 单向链表排序_单向链表排序java链表排序链表排序的两种方式一、交换结点的数据域二、断开链表,重新形成方法示例链表排序的两种方式一、交换结点的数据域有很多种方法,比如冒泡排序,选择排序等其他排序方法structNode*link_sort(structNode*head){ intvalue; structNode*p=head; structNode*q=NULL; while(p) { q=p->next; while(q) { if(p->data&g

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

链表排序的两种方式

一、交换结点的数据域

有很多种方法,比如冒泡排序,选择排序等其他排序方法

struct Node *link_sort(struct Node *head)
{ 
   
	int value;
	struct Node *p = head;
	struct Node *q = NULL;

	while(p)
	{ 
   
		q = p->next;
		while(q)
		{ 
   
			if(p->data > q->data)
			{ 
   
				value = p->data;
				p->data = q->data;
				q->data = value;
			}
			q = q->next;
		}
		p = p->next;
	}

	return head;
}

二、断开链表,重新形成

方法

跟三指针法反转链表类似,也是要定义三个结构体指针。

第一步:
第一个指针用于找最小值
第二个指针用于指向最小值的前一个结点
第三个指针用于遍历链表

第二步:
让最小值从链表当中脱离出来

第三步:
然后再定义一个新的指针,用头插法把指向最小值的指针
形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。

示例

struct Node *link_sort(struct Node *head)
{ 
   
	struct Node *p = NULL;
	struct Node *pMin = NULL;
	struct Node *pMin_prev = NULL;
	struct Node *newHead = NULL;

	while(head)
	{ 
   
		//找到一个最值结点后,重新操作,原链表的结点个数不断减少
		p = head;
		pMin = head;
		pMin_prev = NULL;

		//1、找最值,遍历原链表
		while(p->next)
		{ 
   
			if(pMin->data > p->next->data) //结点数据域比较
			{ 
   
				pMin_prev = p; //标记
				pMin = p->next;
			}
			p = p->next;
		}
		//2、将最值结点脱离出原链表
		if(pMin == head) //情况一,刚好最值就是头结点
		{ 
   
			head = head->next; //原链表头节点往后移
			pMin->next = NULL; //断开连接,同时防止它乱指
		}
		else
		{ 
   
			pMin_prev->next = pMin->next;//断开结点
			pMin->next = NULL;
		}
		//3、插法入新链表,两种情况
		if(newHead == NULL)
		{ 
   
			newHead = pMin;
		}
		else
		{ 
   
			//头插法
			pMin->next = newHead;
			newHead = pMin;
		}
	}
	
	return newHead;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183186.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎么安装requests模块_python3安装模块

    pycharm怎么安装requests模块_python3安装模块问题引入:今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图:反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载:安装方法:首先cd进入C:\Python27\Scripts 执行pipinstallrequests命令可以自动安装卸载方法:首先cd进入C:\Python27\Scripts 执行pipuninstallr…

    2022年8月26日
    11
  • 手写算法-python代码实现Lasso回归

    手写算法-python代码实现Lasso回归手写算法-python代码实现Lasso回归Lasso回归简介Lasso回归分析与python代码实现1、python实现坐标轴下降法求解Lasso调用sklearn的Lasso回归对比2、近似梯度下降法python代码实现LassoLasso回归简介上一篇文章我们详细介绍了过拟合和L1、L2正则化,Lasso就是基于L1正则化,它可以使得参数稀疏,防止过拟合。其中的原理都讲的很清楚,详情可以看我的这篇文章。链接:原理解析-过拟合与正则化本文主要实现python代码的Lasso回归,并用实例佐证原

    2022年5月25日
    81
  • Winform 窗体美化(IrisSkin 换肤库)[通俗易懂]

    Winform 窗体美化(IrisSkin 换肤库)[通俗易懂]IrisSkin换肤库IrisSkin是为MicrosoftVisualStudiodotNET开发的最易用的界面增强dotNET(WinForm)组件包。能完全自动的为应用程序添加支持换肤功能。IrisSkin换肤库百度网盘下载提取码:1pb7皮肤编辑器下载打开下载解压后的文件路径:WinFormSkinDemo\WinFormSkin\WinFormSkin\bi…

    2022年5月28日
    34
  • 开始laravel项目+理解

    开始laravel项目+理解一.laravel运行理解Ⅰ.开始,public/index.php此文件有两个作用。①:作为入口的起点,引导构建服务所需要的一切(包括路由,服务容器之类的)。②:作为所有请求的必经之路。请求经过此文件,会被“指派”到合适的路由,中间件等等进行处理。tips:所以用phpstudy的时候,记得设置一下①指定项目的根目录。②指定下路由。我用的nginx,设置的vhost.config文件。画起第一行用以指定项目的根目录,就apache的www文件的意思。第二行是指定所有请求最终会定向

    2022年5月7日
    40
  • dumpbin的使用方法_Dumpbin 工具的使用

    dumpbin的使用方法_Dumpbin 工具的使用sSummary1000.data1000.reloc1000.rsrc8000.textC:\>dumpbinMicrosoft(R)COFFBinaryFileDumperVersion6.00.844Copyright(C)MicrosoftCorp1992-1998.Allrightsresusage:DUMPBIN[options][fil…

    2022年6月19日
    26
  • 2020年PHP中级面试知识点及答案[通俗易懂]

    2020年PHP中级面试知识点及答案

    2022年2月17日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号