关于#链表#的问题:链表尾插法问题,如果输入23-1按道理应该输出123但是却输出13,而且只有head和head->next两个节点,如果访问头节点的下下一个节点就会出问题(语言-c++)

链表尾插法问题,如果输入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;
你已经写出了程序,没必要给你贴完整的,你明白了就知道怎么改了。