虽然循环不会在我的链接列表中工作

问题描述:

我的while循环不会在我的链表中工作,但for循环会,我正在使用for循环打印链接列表。但我需要一个整数来放置“n”。我试图通过计算链表中的元素来实现这一点,我需要一个while循环。因为当这个问题得到解决时,我不会首先需要for循环,我只是想在计算链表中的元素时使用它。虽然循环不会在我的链接列表中工作

int count = 0; 
    Hand *crdNode = head; 

    while (crdNode != NULL) 
    { 
     crdNode= crdNode->cardPtr; 
     count++; 
    } 
    cout<<endl; 
    return count; 

这是所有在比主之外的单独的源文件中的函数的内部。任何帮助,将不胜感激。

工作循环:

Hand *crdNode = head; 

    for (int i = 0; i < n; i++) 
    { 
     cout<< crdNode ->card<<endl; 
     crdNode= crdNode->cardPtr; 
    } 
    cout<<endl; 

填单子功能

if (head == NULL) 
    { 
     crdNode = new Hand; 
     crdNode ->card = t; 
     temp = crdNode; 
     head = crdNode; 

    } 
    else 
    { 
     crdNode = new Hand; 
     crdNode -> card = t; 
     crdNode -> cardPtr = head; 
     head = crdNode; 
     crdNode -> cardPtr = NULL; 
    } 
+0

怎么样,包括for循环工作,所以我们可以比较自己呢? – John3136

+0

会做,谢谢。 –

+0

在最后一个元素中看起来'cardPtr'不是'NULL',所以while循环不会在最后一个元素之后停止。当你添加一个新元素到列表的最后时,确保你将'cardPtr'赋值为'NULL'。 – Rogus

只需在要插入你的“n'.The while循环是这样的while循环添加一个条件:

while(crdNode!=NULL) 
{ 
    if(position==count) 
    { 
     //insert code 
    } 
} 

问题出在您的“填充列表”

if (head == NULL) 
{ 
    crdNode = new Hand; 
    crdNode ->card = t; 
    crdNode -> cardPtr = NULL; // Add this line to set the next pointer 
    // temp = crdNode;    Remove this line - temp isn't used 
    head = crdNode; 

} 
else 
{ 
    crdNode = new Hand; 
    crdNode -> card = t; 
    crdNode -> cardPtr = head; 
    head = crdNode; 
    // crdNode -> cardPtr = NULL; Remove this line - it destroys the list 
} 

的代码可以被重写和简化,如:

crdNode = new Hand; 
    crdNode -> card = t; 
    crdNode -> cardPtr = head; 
    head = crdNode; 
+0

阅读我上面的评论。您的简化版本完全符合我在评论中所描述的内容 - 这绝不会超过两个元素,并且会导致内存泄漏。每个以前添加的元素被新元素替换,并且前一个元素没有任何指向! – Rogus

+0

@罗格斯 - 你错了。此代码将新元素插入列表的前面。 – 4386427

+0

@Rogus - 关于正在运行的版本,请参阅http://ideone.com/7lQ14O – 4386427