指针的低级错误!铭记!

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

void CreateList1( LinkList &L, int n )
{//建立n个元素的链表L
	
	L = ( LNode * ) malloc( sizeof( LNode ) );
	LinkList L1 = L -> next;  //此赋值语句只是让L1和L->next指向一样,但当L1的内容改变时,L1和L->next就没有任何关系了。
	
	printf("Please input data:\n");
	for( int i = 0; i < n; i ++ )
	{
		L1 = ( LNode * )malloc( sizeof( LNode ) );  //此语句会使L1的内容改变即指向改变,而L->next还是原来的指向没变
		scanf("%d", & ( L1 -> data ) );
		char ch;
		scanf( "%c", &ch );  //吸收ENTER
		if( i < n )		     
		  L1 = L1 -> next;		
		else
		  L1 -> next =NULL;		
	}
}

CreateList1函数是要创建链表,可是出现了错误,因为LinkListL1 = L->next并不是引用,即L1的内容改变L->next内容不会改变,故L->next的指向一直不变,是系统默认的值。

正确做法:

void CreateList( LinkList &L, int n )
{//建立n个元素的链表L
	
	L = ( LNode * ) malloc( sizeof( LNode ) );
	LinkList L1 = L;
	LinkList L2 = L;
	printf("Please input data:\n");
	for( int i = 0; i <= n; i ++ )
	{
		scanf("%d", & ( L1 -> data ) );
		char ch;
		scanf( "%c", &ch );  //吸收ENTER
		if( i < n )
		{
	          L1 -> next = ( LNode * )malloc( sizeof( LNode ) );
		  L1 = L1 -> next;
		}
		else
		  L1 -> next =NULL;		
	}
}


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页