顺序表、单链表元素逆置

单链表逆置操作要求不创建新节点,直接完成逆置操作。

顺序表、单链表元素逆置_第1张图片

#include 
#include 
#define max 5

typedef struct list
{
	int data[max];
	int length;
	
}sqlist;

typedef struct node
{
	int data;
	struct node *next;
}Node,*Linklist;

sqlist initlist (sqlist L);

void reverse (sqlist L);

void print(sqlist L);

Linklist initlinklist(Linklist L);

void reverselist(Linklist L);

void printlist(Linklist L);

void main()
{
	sqlist L;
	L=initlist(L);
	reverse(L);
	//	reverse(initlist(L));
	Linklist L2;
	L2=initlinklist(L2);
	reverselist(L2);
}

sqlist initlist (sqlist L)

{
	for (int i=0;idata);
		counter++;
		if (counter==1)	
		{
			q=p;
			f=p;
		}
		else 
		{
			f->next=p;
			f=f->next;
		}
	}
	p->next=NULL;
	L->next=q;
	printf("单链表创建结束\n");
	printlist(L);//打印初始状态下的链表
	return L;
}


void reverselist(Linklist L)
{
	Linklist p,q;
	p=L->next;
	q=p->next;
	L->next=NULL;
	while(p!=NULL)
	{
		p->next=L->next;//断旧链,接新链
		L->next=p;//头结点后继接入
		p=q;
		if(q!=NULL)	
			q=q->next;
		if (q==NULL&&p==NULL)
			break;
	}
	printf("逆置结束\n");
	printlist(L);
}

void printlist(Linklist L)
{
	printf("调用打印函数,当前状态如下:\n");
	for (int i=0;inext;
		printf(" %d ",L->data);
	}
	printf("\n");
	
}











你可能感兴趣的:(数据结构C语言)