加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用头插法进行链表倒置

发布时间:2020-12-13 22:36:07 所属栏目:百科 来源:网络整理
导读:下面提供一个简单的链表倒置方法, 代码如下: #includestdio.h#includestdlib.h#define N 10#define TRUE 1#define FALSE 0typedef int data_t;typedef struct node{data_t data;struct node *next;}linknode,*linklist;/*创建一个空结点*/void creat_list(

下面提供一个简单的链表倒置方法,

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define N 10
#define TRUE  1
#define FALSE 0

typedef int data_t;

typedef struct node{
	data_t data;
	struct node *next;
}linknode,*linklist;

/*创建一个空结点*/

void creat_list(linklist *head)
{
	*head = (linklist)malloc(sizeof(linknode));
	if(*head == NULL)
	{
		printf("malloc error ! n");
		exit(EXIT_FAILURE);
	}
	(*head)->next = NULL;
}

/*求链表的长度*/

data_t length_list(linklist head)
{
	int count = 0;
	linklist p;
	p=head;
	while(p->next != NULL )
	{
		count++;
		p=p->next;
	}
	return count;	
}

/*以固定的顺序插入元素*/

void insert_list(linklist head,data_t x,int i)
{
	linklist p,q;
	int j=1;
	if(i<1 || i>length_list(head)+1)
	{
			printf("i is wrong!n");
	}
	p = head;
	q=(linklist)malloc(sizeof(linknode));
	q->data=x;
	q->next=NULL;
	while(j<i)
	{
		p=p->next;
		j++;
    }
	q->next = p->next;
	p->next = q;
	return ; 
}

/*打印链表*/

void display(linklist head)
{
	linklist p;
	p=head->next;
	while(p != NULL )
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("n");
	return ;
}
/*使用头插法反转链表*/
void reverse_list(linklist head)
{
	linklist p,q;
	if(head == NULL)
	{
		exit(EXIT_FAILURE); 
	}
	p=head->next;
	while(p->next != NULL)
	{
		q=p->next;
		p->next=q->next;
		q->next=head->next;
		head->next=q;			
	}
	return  ;
}

int main(void)
{
	int i=N;
	linklist head =	NULL;
	creat_list(&head);
	while(i>0)
	{
		insert_list(head,i,1);
		i--;
	}
	display(head);
	reserve_list(head);
	display(head);
	return 0 ;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读