软件注册站
热情软件屋

 
如何将一个单链表按逆序链接
编号: QA004256    
建立日期: 2001年6月19日 最后修改日期: 2003年12月14日
所属类别: C/C++ - 其他方面
   
    操作系统: win98
    编程工具: vc++6.0
    问题:
    如何将一个单链表按逆序链接,即若愿链表中存储元素的次序为a1,a2,a3,......an;则逆序链接后为an,......a3,a2,a1.
    Thank you!
    水平: 刚入门(许杨)
   
    下面是一个完整实例:
    int main(int argc, char* argv[])
    
{
    
struct TMyList{
    
int Data;
    
TMyList* Next;
    
};
    
TMyList* p1,*p2,*p;
    
TMyList* Head=new TMyList,*Head1;
    
Head->Data=1;
    
Head->Next=NULL;
    
p=Head;
    
for(int i=2;i<21;i++)
    
{
    
TMyList* l=new TMyList;
    
l->Data=i;
    
p->Next=l;
    
p=l;
    
p->Next=NULL;
    
}
    
p=Head;
    
while(p!=NULL){
    
printf("%d,",p->Data);
    
p=p->Next;
    
}
    
    
p1=Head; // 表头指针
    
// 下面找到表尾的指针
    
p2=p1->Next;
    
if(p2==NULL) return 0;
    
while(p2->Next!=NULL) p2=p2->Next;
    
Head1=p2;
    
Head1->Next=NULL;
    
while(p2!=Head){
    
p1=Head;
    
while(p1->Next != p2) p1=p1->Next;
    
p2->Next=p1;
    
p2=p1;
    
}
    
    
p2->Next=NULL;
    
Head=Head1;
    
p=Head;
    
printf("\n");
    
while(p!=NULL){
    
printf("%d,",p->Data);
    
p=p->Next;
    
}
    
getch();
    
return 0;
    
}
    

    
    赖雨游的意见:
    #include<iostream.h>
    
typedef struct LNode{
    
char data;
    
struct LNode * next;
    
}head;
    
    
void createL(LNode **h)
    
{
    
LNode *p=new LNode;
    
p->next=NULL;*h=p;
    
}
    
int insertL(LNode **h,int i, char e)
    
{
    
LNode*p=*h;int j=0;
    
while(p&&j<i-1){
    
p=p->next;++j;}
    
if(!p||j>i-1) return 0;
    
LNode *s=new LNode;
    
s->data =e;s->next =p->next;
    
p->next=s;
    
return 1;
    
}
    
void display(LNode *h)
    
{
    
while(h->next)
    
{
    
cout<<h->next->data;
    
h=h->next;
    
if(h->next)cout<<"->";
    
}
    
cout<<endl;
    
}
    
void L_convert(LNode **h)
    
{
    
LNode *s=*h;
    
LNode *p1=new LNode;
    
LNode *p2=new LNode;
    
LNode *p3=new LNode;
    
p1=s->next ;
    
p2=p1->next ;
    
p3=p2->next ;
    
p1->next =NULL;
    
while(p3->next )
    
{
    
p2->next =p1;
    
p1=p2;
    
p2=p3;
    
p3=p3->next;
    
}
    
p2->next =p1;
    
p3->next =p2;
    
s->next =p3;
    
*h=s;
    
}
    
int main()
    
{
    
char e;int n;
    
LNode *head=NULL;
    
createL(&head);
    
cout<<"要插入多少个节点? ";
    
cin>>n;
    
cout<<"输入要插入的数\n";
    
for(int i=1;i<=n;i++){
    
cin>>e;
    
insertL(&head,i,e);}
    
cout<<"你要建立的链表是\n";
    
display(head);
    
cout<<"你要逆序表示的链表是\n";
    
L_convert(&head);
    
display(head);
    
    
return 0;
    
}
    

    

此问题由赵生回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio