s2unn
2016-10-06 10:13
采纳率: 100%
浏览 1.3k
已采纳

为什么这个程序输出单链表表的时候为什么只输出第一个结点呢??

#include
#include
#include
typedef char ElemType;

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode , *LinkList ;

 void CreateList( LinkList &L , int n )

{
//LNode *q , *p;
LinkList p;
L = ( LinkList ) malloc ( sizeof ( LNode ));
L->next = NULL ;
//q = L;
for( int i = 0 ; i < n ; i++ )
{

p = ( LinkList ) malloc ( sizeof ( LNode ));
scanf ( "%c", &p->data );
/*p->next = q->next ;
q->next = p;
q = p ; */
p->next = L->next ;
L->next = p ;
}
}
void DipList ( LinkList L )
{
LinkList p ;
p = L->next;
while ( p != NULL )
{
printf("%c" , p->data);
p=p->next ;

}
}

void MergeList ( LinkList ha , LinkList hb , LinkList &hc ,int m ,int n)
{
LNode *q , *p ;
p = ha ; q = hb ;
int j = 0 , i = 0;
while ( i< m && j < n )
{
i++ ; j++ ;
p = p->next ;
q = q->next ;
}
if( i {
hc = hb;
p = ha ->next ;
q->next = ha->next ;
free(ha) ;
}

if( j < n )
{
hc = ha ;
q = hb->next ;
p->next = hb->next ;
free(hb);
}
}
void main()
{
int m ,n ;
LinkList ha , hb ,hc;
printf("请输入单链表a的长度:");
scanf("%d", &m );
printf( "请输入单链表a的元素:\n") ;
CreateList( ha , m);
printf("请输入单链表b的长度:");
scanf("%d", &n );
printf( "请输入单链表b的元素:\n") ;
CreateList( hb , n);
MergeList (ha , hb ,hc , m , n) ;
printf( "合并后的单链表为:") ;
DipList ( hc ) ;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • YXTS122 2016-10-07 03:28
    已采纳

    #include<stdio.h>
    #include<stdlib.h>
    typedef char ElemType;
    typedef struct LNode
    {
    ElemType data[2];
    struct LNode next;
    }LNode , *LinkList ;
    void CreateList(LinkList &L,int n )
    {
    LNode *q , *p;
    //LinkList p;
    L = ( LinkList ) malloc ( sizeof ( LNode ));
    L->next = NULL ;
    q = L;
    for( int i = 0 ; i < n ; i++ )
    {
    p = ( LinkList ) malloc ( sizeof ( LNode ));
    scanf ( "%s", p->data );
    getchar();
    p->next = q->next ;
    q->next = p;
    q = p ;
    /
    p->next = L->next ;
    L->next = p ;*/
    }
    }
    void DipList ( LinkList L )
    {
    LinkList p ;
     p = L->next;
    while ( p != NULL )
    {
    printf("%s " , p->data);
    p=p->next ;
    }
    }
    void MergeList ( LinkList ha , LinkList hb , LinkList &hc ,int m ,int n)
    {
    LNode *q , *p ;
    p = ha ;
    q = hb ;
    int j = 0 , i = 0;
    while ( i<m && j <n )
    {
    i++ ;
    j++ ;
    p = p->next ;
    q = q->next ;
    }
    if ( i<m)
    {
    hc = hb;
    p = ha ->next ; 
    q->next = ha->next ;
    free(ha) ;
    }
    if ( j < n )
    {
    hc = ha ;
    q = hb->next ;
    p->next = hb->next ;
    free(hb);
    }
    }
    int main()
    {
    int m ,n ;
    LinkList ha , hb ,hc;
    printf("请输入单链表a的长度:");
    scanf("%d", &m );
    printf("请输入单链表a的元素:\n") ; 
    CreateList( ha , m);
    DipList(ha);
    printf("请输入单链表b的长度:"); 
    scanf("%d", &n );
    printf("请输入单链表b的元素:\n") ;
    CreateList( hb , n);
    DipList(hb);
    MergeList (ha , hb ,hc , m , n) ;
    printf( "合并后的单链表为:") ;
    DipList ( hc ) ;
    return 0;
    }

    点赞 评论
  • 凝视深空 2016-10-06 15:38

    建立链表的for循环里面
    p–>next=L–>next
    这个直接把第一个节点的指针域置空,当然只输出第一个节点了。
    把这行去掉,在L–>next=p后面再加一行
    p–>next=NULL

    点赞 评论

相关推荐 更多相似问题