指针的低级错误!铭记!

来源:互联网 发布:淘宝店铺首页视频代码 编辑:程序博客网 时间:2024/05/22 05:04
typedef struct LNode{int data;struct LNode * next;}LNode, * LinkList;void CreateList1( LinkList &L, int n ){//建立n个元素的链表LL = ( 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 );  //吸收ENTERif( 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个元素的链表LL = ( 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 );  //吸收ENTERif( i < n ){          L1 -> next = ( LNode * )malloc( sizeof( LNode ) );  L1 = L1 -> next;}else  L1 -> next =NULL;}}


原创粉丝点击