链表的建立,尾节点指向新的节点 用tail->newnode,为什么不能用tail=tail->next; 部分程序在下面:

if(head ==NULL)
head = newnode;
else
tail->next = newnode;
tail=tail->next;//错误
//tail = newnode;

...这都给你想到了, 思维真新颖啊.
newnode是从内存堆区划分一个新的空间, 存储一个新的结点, 这段程序的作用是把newnode链接到链表的尾端
一开始tail->next是没东西的, 是一个null, 现在你把newnode的内存地址放在tail->next里, 这样链表就连上了.
你的tail=tail->next 是错的, tail->next一开始是null, 是一个指针类型, 而tail是指向尾结点的指针, 这么赋值只会把tail赋值成null, 从而丢失了尾指针

而下一句tail = newnode;是必须加上的, 因为现在链表的结尾变成newnode了, 这样tail作为尾指针需要更新, 所以要把它指向新的链表结尾上去
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-28
你的程序少了一个括号,改成这样就没事了
if(head ==NULL)
head = newnode;
else
{// 如果不加括号,1句是(head !=NULL)时执行,2句始终执行,就会出问题
tail->next = newnode; // 1句
tail=tail->next;//错误 // 2句
}
//tail = newnode;
第2个回答  2011-06-25
要指向新的结点当然不能是这样啦,估计你的那个tail是一个链表指针,所以才会这样的啊追问

是链表指针,能详细解释下吗?

追答

这很难说清的,最好自己照着书的说动手画一下就很容易明白了

相似回答