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

数据结构小问题

编程哥哥 发布于 2010-03-19 19:38, 652 次点击
链表的转置算法是什么意思哟。。能做一道例题就好了
3 回复
#2
cnfarer2010-03-22 16:14
头变尾...尾变头!
#3
shaojie5192010-03-22 18:54
void LinkList_reverse(Linklist &L)//链表的就地逆置;为简化算法,假设表长大于2
{
 p=L->next;
q=p->next;s=q->next;p->next=NULL;
 while(s->next)
 {    q->next=p;p=q;
   q=s;s=s->next; //把L的元素逐个插入新表表头
  }
 q->next=p;s->next=q;L->next=s;
}//LinkList_reverse分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.
#4
xichong2010-03-22 21:57
给你来个完整的可以运行的!
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;
void initial(Linklist L)
{
    Linklist p;
    p=(Linklist)malloc(sizeof(LNode));
    if(!p) exit(0);
    L=p;
    L->next=NULL;
}
void creatlist(Linklist L)
{
    Linklist p,q;
    int m;
    q=L;
    printf("请输入若干个正整数,输入非正整数时结束:\n");
    while(1)
    {
        scanf("%d",&m);
        if(m>0)
        {
            p=(Linklist)malloc(sizeof(LNode));
            p->data=m;
            q->next=p;
            q=p;
        }
        else break;
    }
    p->next=NULL;
}
void displaylist(Linklist L)
{
    Linklist p=L;
    for(p=L->next;p!=NULL;p=p->next)
        printf("%d  ",p->data);
    printf("\n");
}
void reverse(Linklist L)//方法:在第一个结点之前依次插入后面的元素
{
    Linklist p,q;
    p=L->next->next;q=p->next;
    L->next->next=NULL;
    while(q)
    {
        p->next=L->next;
        L->next=p;
        p=q;
        q=q->next;
    }
    p->next=L->next;//处理链表中的最后一个结点
    L->next=p;
}
void main()
{
    LNode A;
    initial(&A);
    creatlist(&A);
    printf("原序输出链表:\n");
    displaylist(&A);
    reverse(&A);
    printf("逆序输出链表:\n");
    displaylist(&A);
}
1