单链表的逆转
将单链表就地逆置,要求不创建新的结点
输入要求
先输入一个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"); }