我一直在学习数据结构,目前正在使用链表。 我试图在链表的末尾添加一个节点,但无法找到正确的逻辑。 我试过在一开始插入一个节点,它工作得很好。
这是代码:
#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个位置的节点。 这里的节点是从一开始添加的,我试图找出从末尾插入它的逻辑。
任何关于这方面的建议和意见都将是非常有帮助的。
提前感谢你。
玩代码。
void insert_end(int data) {
Node* n = head; // 1
while(n->next) { // 2
n = n->next;
}
Node* temp = new Node(); // 3
temp->data = data;
temp -> next = nullptr;
n->next = temp; // 4
}
方法简述:
1:
您将获得列表的首位。
2:
读取列表的下一个元素,直到列表中有最后一个节点。 如果在这里编写while(n)...
,您将到达列表的末尾,这意味着nullptr
,代码将中断。
3:
创建一个新的节点
并设置数据。
4:
在列表末尾插入新的节点
。
void Insert(int data) {
Node* temp = new Node();
temp->data = data;
temp->next = null;
Node* itr = head;
while(itr->next != NULL){ //iterating till the last node
itr = itr->next;
}
itr->next = temp;
}