输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
struct
ListNode
{
int m_nKey;
ListNode* m_pNext;
};
1、把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了
1、把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了
#include<iostream.h>
#include<malloc.h>
struct node
{
int data;
node *next;
};
void creatlist(node *&head,int a[],int len)
{
node *q=head;
for(int i=0;i<len;i++)
{
node *p=(node *)malloc(sizeof(node));
p->data=a[i];
q->next=p;
q=q->next;
}
q->next=NULL;
}
void printflist(node *head)
{
node *p=head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void invertlist(node *head)
{
node *p=head->next;
head->next=NULL;
while(p!=NULL)
{ node *q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
}
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
node *head=(node *)malloc(sizeof(node));
creatlist(head,a,sizeof(a)/sizeof(int));
cout<<"正常链表:"<<endl;
printflist(head);
invertlist(head); //倒序链表
cout<<"倒序链表:"<<endl;
printflist(head);
invertlist(head); //把倒序后的链表倒序成原来顺序
cout<<"倒序后正常链表:"<<endl;
printflist(head);
}
2、递归输出结点
#include<iostream.h>
#include<malloc.h>
struct node
{
int data;
node *next;
};
void creatlist(node *&head,int a[],int len)
{
node *q=head;
for(int i=0;i<len;i++)
{
node *p=(node *)malloc(sizeof(node));
p->data=a[i];
q->next=p;
q=q->next;
}
q->next=NULL;
}
void printflist(node *head)
{
node *p=head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void printflistf(node *p)
{
if(p!=NULL)
{
if(p->next==NULL)
cout<<p->data<<" ";
else
{
printflistf(p->next);
cout<<p->data<<" ";
}
}
}
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
node *head=(node *)malloc(sizeof(node));
creatlist(head,a,sizeof(a)/sizeof(int));
cout<<"正常链表:"<<endl;
printflist(head);
cout<<"倒序链表:"<<endl;
printflistf(head->next);
cout<<endl;
}