单链表的逆转

将单链表就地逆置,要求不创建新的结点

输入要求

先输入一个n,表示接下来要输入n个数
接下来一排输入n个数,构造链表。
详见样例输入。

输出要求

见样例输出

测试数据

输入示例

5
1 2 3 4 5

#include<stdio.h>
#include<stdlib.h> 

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList; 

void createLList(LinkList &L, int n); // 采用尾插法创建链表 
void inverseLList(LinkList &L); // 链表就地逆置,不创建任何结点 
void printLList(LinkList L); // 打印链表,每个数字后有一空格 

int main(){
	int n; 
	LinkList list;
	scanf("%d",&n);
	createLList(list, n);
	printLList(list); 
	inverseLList(list);
	printLList(list); 	
}

*************************************************************************************************************

#include<stdio.h>
#include<stdlib.h> 

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList; 

void createLList(LinkList &L, int n); // 采用尾插法创建链表 
void inverseLList(LinkList &L); // 链表就地逆置,不创建任何结点 
void printLList(LinkList L); // 打印链表,每个数字后有一空格 

int main(){
	int n; 
	LinkList list;
	scanf("%d",&n);
	createLList(list, n);
	printLList(list); 
	inverseLList(list);
	printLList(list); 	
}

void createLList(LinkList &L, int n){
	L = new LNode;
	L->next = NULL;
	LNode *r = L;
	for(int i=0;i<n;i++){
		LNode *p= new LNode;
		scanf("%d",&p->data);
		p->next = NULL;
		r->next = p;
		r = p;
	}
} 
void inverseLList(LinkList &L){ 
    LNode *PL1=L->next;  
    LNode *PLn=PL1->next;//Ïȱ£´æÍ·½áµãºóÃæÒ»¸ö½áµãµÄÖ¸Õ룬²»È»Í·½áµã¿³¶Ïºó½«¶ªÊ§ºóÃæµÄ½áµã  
    PL1->next=NULL;//¿³¶ÏµÚÒ»¸ö½áµã£¬Ò²¾ÍÊÇÍ·½áµã  
      
    while(PLn)  
    {  
        LNode *Tmp=PLn->next;//ÓÃTmp±£´æµ±Ç°½áµãµÄnext½áµãµÄÖ¸Õ룬ȷ±£¿³¶Ïµ±Ç°½áµãºó¶ªÊ§ºóÃæµÄ½áµã¡£  
        PLn->next=PL1;  
        L->next=PLn;  
        PL1=PLn;//PLn³ÉΪÏÂÒ»¸ö½áµãµÄnextÖ¸ÕëµÄÖ¸ÏòÄ¿±ê  
        PLn=Tmp;//PLn±ä³ÉÐèÒª²åÈëµÄ½áµãµÄÖ¸ÕëÁË  
    }  	
} 
void printLList(LinkList L){
	LNode *p = L->next;
	while(p){
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}

阅读更多

没有更多推荐了,返回首页