注册 登录
编程论坛 数据结构与算法

求大神! 链表转置有问题 转置后只能输出两个数....

滚落的石子 发布于 2014-03-09 22:25, 545 次点击
#include <iostream>

typedef struct student   //记住前面要加typedef
{
    int grade;
    student*next;
}list;

void set_list(list* &head,int a[],int n) //前插入法
{
    list *p;
    head=new list;
    head->next=NULL;
   
    for (int i=0;i<n;++i)
    {    p=new list;
        p->grade=a[i];
        p->next=head->next;
        head->next=p;
    }
   
}
void print_list(list *head)
{
    list*p=head->next;
    while(p!=NULL)
    {
        std::cout<<p->grade<<"\t";
        p=p->next;
    }
    std::cout<<std::endl;
}
bool InverseList(list*&L) //链表转置
{
    if (L->next->next==NULL)
    {return false;
    }

    list*p=L->next,*q;
    q=p->next;
    while (q!=NULL)
    {
        p->next=q->next;
        q->next=p;
        L->next=q;
        q=p->next;
    }
    return true;
}
int main()
{
    list *head;
    int a[]={1,2,5,4,4,4,7};
    set_list(head,a,7);
    print_list(head);
    InverseList(head);
    print_list(head);
}
2 回复
#2
滚落的石子2014-03-09 22:48
这个到底有什么问题啊?原本一个链表怎么变得只有两个数据啦
#3
滚落的石子2014-03-09 23:16
哈哈 ,我想出来了,只需要将while循环改成下面就成了
 while (q!=NULL)
     {
         p->next=q->next;
         q->next=L->next;
         L->next=q;
         q=p->next;
     }
典型的头插入法!
1