 |
下面是一个完整实例:
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, 其他方面, 。
|