链表尾插法问题,如果输入2 3 -1按道理应该输出1 2 3但是却输出1 3,而且只有head和head->next两个节点,如果访问头节点的下下一个节点就会出问题。求解?
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
struct ListNode
{
string name;
int id;
ListNode* next;
ListNode(int x) : id(x),name("") {};
ListNode() {};
};
int main()
{
ListNode* head = new ListNode(1);
ListNode* p = head;
ListNode* st = new ListNode();
int h;
scanf("%d", &h);
while (h !=-1)
{
st->id = h;
ListNode* s = new ListNode();
s = st;
p->next = s;
p = p->next;
p->next = nullptr;
scanf("%d",&h);
}
ListNode* pi = head;
while (pi != NULL)
{
cout << pi->id << endl;
pi = pi->next;
}
return 0;
}
ListNode* s = new ListNode();
s = st;
p->next = s;
相当于下一个节点永远都是在循环外创建的那个st,链表只有两个元素。
这样修改,循环外面的 st 不需要,循环内与 st 相关的也不需要,新创建的 s 的 id 设置为输入的 h:
//ListNode* st = new ListNode();
//st->id = h;
//s = st;
s->id = h;
你已经写出了程序,没必要给你贴完整的,你明白了就知道怎么改了。