#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}LinkList;
LinkList CreateList_L(LinkList *&L,int a[],int n)
{
int i;
LinkList *s,head;
head=(LinkList)malloc(sizeof(LinkList));
head->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data =a[i];
s->next =head->next;
head->next=s;
}
return *head;
}
void replaceList_L(LinkList *&L)
{
LinkList *right=L;
LinkList *left=NULL;
LinkList *now;
while(right!=NULL)
{
now=right;
right=right->next ;
now->next =left;
left=now;
}
}
void print(LinkList *&L)
{
puts("print ");
while(L->next !=NULL)
{
printf("%d ",L->data);
L=L->next;
puts("ok");
}
puts("no");
}
int main()
{
LinkList *list;
int num[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&num[i]);
}
CreateList_L(list,num,5);
print(list);
replaceList_L(list);
print(list);
}
修改处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}LinkList;
void CreateList_L(LinkList *&L,int a[],int n)
//LinkList* CreateList_L(LinkList *&L,int a[],int n)
{
int i;
LinkList *s,*head;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
head = L;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->next =NULL;
s->data =a[i];
head->next = s; //s->next =head->next;
head =s; //head->next=s;
}
//return head;
}
void replaceList_L(LinkList *&L)
{
LinkList *right=L->next;
L->next = NULL; //LinkList *left=NULL;
LinkList *now;
while(right!=NULL)
{
now=right;
right=right->next ;
now->next =L->next;//now->next =left;
L->next =now; //left=now;
}
}
void print(LinkList *L)
//void print(LinkList *&L)
{
puts("print ");
while(L->next !=NULL)
{
printf("%d ",L->next->data); //printf("%d ",L->data);
L=L->next;
//puts("ok");
}
puts("\n");//puts("no");
}
int main()
{
LinkList *list;
int num[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&num[i]);
}
CreateList_L(list,num,5);
print(list);
replaceList_L(list);
print(list);
return 0;
}
逆序输出可以用递归,比较简单
你到底是只需要逆序输出,还是要将链表节点逆序后再输出?