2014-10-29 191 views
0

这是我在C++中实现列表的程序。我输入元素直到0.程序正确显示了我第一个元素,但是第二个错误。我大概是在第二个条件在列表C++中查找第一个和第二个元素

if (p -> next == first) { 
    secondElement = first -> data; 
} 

enter image description here

犯错误。你能说出它有什么问题吗?由于

#include "stdafx.h" 
#include "iostream" 
using namespace std; 

struct Node { 
    int data; 
    Node *next; 
}; 

int firstElement; 
int secondElement; 

int main() 
{ 
    Node *first = 0; 
    Node *p; 

    cout << "Enter a list" << endl; 
    int i; 
    while (true) { 

     cin >> i; 
     if (i == 0) break; 


     p = new Node; 
     p -> data = i; 


     p -> next = first; 

     if (first == 0) { 
      first = p; 
      firstElement = first -> data; 
     } 

     if (p -> next == first) { 
      secondElement = first -> data; 
     }  

     first = p; 

    } 

    cout << "First element is: " << firstElement << endl; 
    cout << "Second element is: " << secondElement << endl; 
    cout << "List: "; 

    p = first; 
    while (p) { 
     cout << p -> data << " "; 
     p = p -> next; 
    } 
    cout << endl; 

    return 0; 
} 
+0

为什么不只是使用std :: list? – 2014-10-29 18:49:01

+1

这是我的任务。我必须手动做 – Luchnik 2014-10-29 18:50:51

+0

我相信它的印刷第一和第二个元素相同。 – ravi 2014-10-29 18:52:36

回答

1

你可以做这样的(我刚编辑while循环):

while (true) { 

    cin >> i; 
    if (i == 0) break; 


    p = new Node; 
    p -> data = i; 
    p -> next = 0; 

    if (first != 0 && first->next == 0) 
     secondElement = p->data; 

    p -> next = first; 

    if (first == 0) { 
     first = p; 
     firstElement = first -> data; 
    } 

    first = p; 

} 

希望这是你想达到什么......

0

通过每一次循环中你将元素的指针设置为第一个。

p -> next = first; 

然后在检查第二个元素时,您检查指针是否设置为第一个,它始终是。

if (p -> next == first) // This is always true 

你将不得不使用一些不同的检查,看它是否在列表中的第二个条目,如:

if (p->next && !p->next->next) // only true second time around 
{ 
    secondElement = p -> data; // also note the change here 
} 
0
p -> next = first; 
...... 
enter code here 
if (p -> next == first) { //it's always true here 

你应该有

if (p -> next == 0) { 
相关问题