Code Bye

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

#include<iostream>
#include<malloc.h>
#include<stdlib.h>
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<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);
}
}
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 ) ;
}
解决方案

20

单步跟踪程序运行,每步观察变化情况分析原因

15

主要问题在于CreateList函数中的scanf ( “%c”, &p->data )一句,这时留在输入流中的空格或回车符都被当做一个%c输入,可以改为scanf ( ” %c”, &p->data ),即在%c前面加个空格用于剔除输入流中的空白符。

30

#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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求问这个程序输出单链表表的时候为什么只输出第一个结点呢