单链表(二):如何实现单链表的排序、逆置(逆序)

本文介绍了如何实现单链表的排序和逆置。在排序部分,提供了示例代码。对于逆置,文章详细讲解了两种方法,包括基本思路和具体步骤,并附有示例代码及测试结果展示。
摘要由CSDN通过智能技术生成

1、单链表的排序

示例代码如下:

#include<iostream>
using namespace std;
 
///单链表结构体:结点
typedef struct student
{
    int data;				//结点中的数据
    struct student *next;	//指向链表下一个结点的指针
}node;

node *head;	//头结点指针
int index;	//链表长度

///建立单链表
void *create()
{
    node *p,*s;	//增加结点的位置指针、要增加结点的指针
    int x,cycle=1;		//x是结点中的数据,若为0代表创建结束;cycle是循环控制变量
    head=(node*)malloc(sizeof(node)); //动态分配,建立头节点
    p=head;
    while(cycle)
    {
        printf("Please input the data:");
        scanf("%d",&x);
        if(x!=0)
        {
            s=(node*)malloc(sizeof(node));	//动态分配,每次新建一个节点
            s->data=x;						//将数据存入该结点
//			printf("%d\n",s->data);			//查看该结点中的数据是否正确
            p->next=s;						//连接头指针与当前结点
            p=s;							//并将头指针指向当前结点的指针,即下一个结点的地址
        }
        else
        {
            cycle=0;
        }
    }
    
    p->next=NULL;		//最后一个结点为空指针(必须)

//	head=head->next;	//创建完毕单链表,头结点指针回去
//	printf("\n   yyy   %d",head->data);	//打印第一个结点中的数据,用于验证

    return head;		//返回根结点
}

///遍历单链表(单链表打印),同时测长
//注:链表无法从反方向进行遍历
void traverse(node *head)
{
	node *p;
	index=0;
	if(head->next==NULL)
	{
		printf("Link is empty!\n");
		return;
	}
	p=head->next;
	while(p!=NULL)//遍历链表
	{
		printf("The %dth node is:%d\n",++index,p->data);//打印元素,亦可计算链表长度(index)
		p=p->next;//进入下一个结点
	}
	p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值