题目:有一个单链表L(至少有一个结点),其头结点指针为head,编写一个函数将L逆置,即最后一个结点变成第1个结点,原来倒数第二个结点变成第二个结点…如此等等。
代码:#include
#include
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode;
typedef Lnode *LinkList;
Status InitList(LinkList &L)//初始化一个单链表 {
Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
if(p==NULL) return ERROR;
L=p;
return OK;
}
Status CreatList(LinkList &L)//创建一个单链表 {
int i,len;
ElemType x;
LinkList p,q;
printf("请输入表长:");
scanf("%d",&len);
printf("\n输入链表元素:\n");
i=0; q=L;
while(i
{
p=(Lnode *)malloc(sizeof(Lnode));
scanf("%d",&x);
p->data=x;
q->next=p;
q=p;
i++;
}
return OK;
}
void Nizhi(LinkList &L) //将链表中的元素顺序逆置 {
LinkList New, p, q;
p=L->next;
New=(LinkList)malloc(sizeof(LinkList));
New->next=NULL;
while(p!=NULL)
{
LinkList s=(LinkList)malloc(sizeof(LinkList)); s->data=p->data;
p=p->next;
s->next=New->next;
New->next=s;
}
L=New;
}
void PrintList(LinkList L)//显示表中元素
{
LinkList p;
p=L->next;
printf("逆置后链表中的元素为:"); while(p)
{
printf("%4d",p->data); p=p->next;
}
printf("\n");
}
void main()//主函数
{
LinkList L;
InitList(L);
CreatList(L);
Nizhi(L);
PrintList(L);
}
题目:有一个单链表L(至少有一个结点),其头结点指针为head,编写一个函数将L逆置,即最后一个结点变成第1个结点,原来倒数第二个结点变成第二个结点…如此等等。
代码:#include
#include
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode;
typedef Lnode *LinkList;
Status InitList(LinkList &L)//初始化一个单链表 {
Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
if(p==NULL) return ERROR;
L=p;
return OK;
}
Status CreatList(LinkList &L)//创建一个单链表 {
int i,len;
ElemType x;
LinkList p,q;
printf("请输入表长:");
scanf("%d",&len);
printf("\n输入链表元素:\n");
i=0; q=L;
while(i
{
p=(Lnode *)malloc(sizeof(Lnode));
scanf("%d",&x);
p->data=x;
q->next=p;
q=p;
i++;
}
return OK;
}
void Nizhi(LinkList &L) //将链表中的元素顺序逆置 {
LinkList New, p, q;
p=L->next;
New=(LinkList)malloc(sizeof(LinkList));
New->next=NULL;
while(p!=NULL)
{
LinkList s=(LinkList)malloc(sizeof(LinkList)); s->data=p->data;
p=p->next;
s->next=New->next;
New->next=s;
}
L=New;
}
void PrintList(LinkList L)//显示表中元素
{
LinkList p;
p=L->next;
printf("逆置后链表中的元素为:"); while(p)
{
printf("%4d",p->data); p=p->next;
}
printf("\n");
}
void main()//主函数
{
LinkList L;
InitList(L);
CreatList(L);
Nizhi(L);
PrintList(L);
}