我正在尝试创建一个函数,该函数接受一个由我的教授定义的类型的标记向量,并将向量的每个元素输入到链表中,我返回第一个元素的头部。new_list 最后一部分的 cout 语句表明我确实将向量的元素插入到链表中。所以当我输入:
新的 9 2 3
9 2 3 正在插入
print_list_cmd 是由我的教授定义的,应该是我通过调用 new a 创建的列表,所以 print a 应该返回 9 2 3 但是当我键入 print 时,我只会得到链表的最后一个元素,即 3。
我有两个问题我的代码不是很优雅有没有更好的方法将标记向量插入到链表中?二 为什么打印命令只返回链表中的最后一个元素?还有一个词法分析器类可以对输入进行标记,但它有很多代码,所以我没有插入它,如果它有帮助或者你需要我插入它我会的。
struct Node {
int key;
Node* next;
Node(int k=0, Node* n=NULL) : key(k), next(n) {};
};
Node* new_list(const vector<Token>& tok_vec){
//int key;
Node *head;
Node *newHead;
Node *headPointer = NULL;
newHead = new Node;
newHead -> next = NULL;
head = NULL;
for(unsigned int i = 0 ; i < tok_vec.size() ; i++){
// newHead -> key = tok_vec.at(i).value;
string myStream = tok_vec.at(i).value;
istringstream buffer(myStream);
int value;
buffer >> value;
newHead -> key = value;
if(!head){
head = newHead;
}else{
headPointer = newHead;
while(headPointer -> next){
headPointer = headPointer -> next;
headPointer -> next = newHead;
}
}
cout << head->key << endl;
}
return head->key;
}
void print_list_cmd(Lexer lex){
Token tok = lex.next_token();
if (tok.type != IDENT || lex.has_more_token())
throw runtime_error("SYNTAX: print listname");
if (list_table.find(tok.value) == list_table.end())
throw runtime_error(tok.value + " not defined or already destroyed");
print_list(list_table[tok.value]);
}