【发布时间】:2020-11-15 02:27:00
【问题描述】:
我一直在学习数据结构,目前正在使用链表。我试图在链表的末尾添加一个节点,但无法找出正确的逻辑。我试过在开头插入一个节点,效果很好。
这是代码:
#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int data;
Node* next;
};
Node* head; // global
void Insert(int data) {
Node* temp = new Node();
temp -> data = data;
temp -> next = head;
head = temp;
} // insert an integer
void Print(){
Node* temp = head;
cout << "List is: ";
while (temp != NULL) {
cout << temp -> data << " ";
temp = temp -> next;
}
cout << endl;
} // print all elements in the list
void Delete(int n){
Node* temp1 = head;
if(n == 1) {
head = temp1 -> next; // head now points to second node
delete temp1;
return;
}
int i;
for(i = 0; i < n-2; i++)
temp1 = temp1 -> next;
// temp1 points to (n-1)th Node
Node* temp2 = temp1 -> next; // nth Node
temp1 -> next = temp2 -> next; // (n+1)th Node
delete temp2; // delete temp2
} // Delete node at position n
int main() {
head = NULL; // empty list
Insert(2);
Insert(4);
Insert(6);
Insert(5); // List: 2,4,6,5
Print();
int n;
cout << "Enter a postion: " << endl;
cin >> n;
Delete(n);
Print();
}
此代码删除第 n 个位置的节点。这里的节点是从头开始添加的,我正在尝试找出从最后插入它的逻辑。
对此的任何建议和建议都会非常有帮助。
提前谢谢你。
【问题讨论】:
-
尝试编写一个返回指向最后一个节点的指针的函数。当你完美地工作时,回到如何将节点添加到列表末尾的问题。
-
感谢您的支持。如果您喜欢我的回答,请通过单击我的回答中的复选标记将问题标记为已解决。另外,我添加了一个在线 IDE 的链接,您可以自己试用该功能。
-
如果您包含
tail指针,您可以在0(1) 时间的末尾添加而无需迭代。 Singly Linked List of Integers (example) 参见add函数。 (C——但逻辑是一样的)
标签: c++ data-structures linked-list singly-linked-list