首页 > 技术文章 > 单链表的逆置(不带头结点)

danny0706 2016-08-13 20:18 原文

#include <stdio.h>
#include <stdlib.h>
typedef struct node 
{
	int data;
	struct node *next;
}Node;
Node *Initiate(Node *linklist)
{
	linklist=NULL; 
	return linklist; 
}
Node* creatlist_end(Node *linklist)//尾插法
{
	int i,n;
	Node *p,*q;
	scanf("%d",&n); 
	for(i=0;i<n;i++)
		{
		   p=(Node *)malloc(sizeof(Node));
		   scanf("%d",&p->data);
		   if(NULL==linklist)
		   {
		   	  q=linklist=p;
		   }
		   else
		   {
		   	 p->next=NULL;
		     q->next=p;
		     q=p;	
		   }
    	}
    	return linklist;
}
Node* creatlist_front(Node *linklist)//头插法
{
	Node *q;
	int i,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		q=(Node*)malloc(sizeof(Node));
		scanf("%d",&q->data);
		q->next=linklist;
		linklist=q;
	}
	return linklist;
}
Node* reverselist(Node *linklist)//逆置
{
	Node *pre=linklist;
	if(NULL==pre)
	return;
	Node *pcur=pre->next;
	while(pcur!=NULL)
	{
		Node *pnext=pcur->next;
		pcur->next=pre;
		pre=pcur;
		pcur=pnext;
	}
	linklist->next=NULL;
	linklist=pre;
}
void printlist(Node *linklist)
{
		while(linklist)
	{
		printf("%d ",linklist->data);
		linklist=linklist->next;
	}
	printf("\n");
}
int main()
{
	Node *LinkList=Initiate(LinkList);
	LinkList=creatlist_front(LinkList);
	printlist(LinkList);
	LinkList=creatlist_end(LinkList);
	printlist(LinkList);
	LinkList=reverselist(LinkList);
	printlist(LinkList);
}

  

推荐阅读