我一直在尝试将项目添加到链接列表的末尾。我想我对这个概念有一定的把握,但是我很难实现这些代码。特别是,能够遍历链表并找到尾部。这是我到目前为止。我一直在尝试不同的事情。任何帮助,将不胜感激。将节点添加到链接列表的末尾
##include <iostream>
using namespace std;
class node
{
public:
int data;
node *next;
};
class linkedList
{
private:
node* ptrHead;
node* ptrTail;
int size;
public:
linkedList(); //default constructor
void display();
void addFront(int);
void removeFront();
void addBack(int);
void removeBack();
};
//default constructor
linkedList::linkedList(){
size = 0;
ptrHead = ptrTail = NULL;
}
//display linked list
void linkedList::display(){
node* current = ptrHead;
while (current != NULL) {
cout << current->data << " "; //display current item
current = current->next; //move to next item
}
cout << size;
}
//add item to front of linked list
void linkedList::addFront(int addData){
node* n = new node;
n->next = ptrHead;
n->data = addData;
ptrHead = n;
size++;
}
//remove item from front of linked list
void linkedList::removeFront(){
node* n = ptrHead;
ptrHead = ptrHead->next;
delete n;
size--;
}
void linkedList::addBack(int addData){ ////work in progress
node* n = new node; //create new node
n->data = addData; //input data
n->next = NULL; //set node to point to NULL
if (ptrTail == NULL) // or if (ptrTail == nullptr)
{
ptrHead = n;
ptrTail = n;
}
else
{
ptrTail->next = n;
ptrTail = n;
}
size++;
}
//this is the test code from my main function
int main()
{
//test code
linkedList list;
list.addFront(40);
list.addFront(30);
list.addFront(20);
list.addFront(10);
list.addFront(0);
list.addBack(50);
list.addBack(60);
list.display(); //50 60 7 (the 7 is the count/size of the linked list)
cout << endl;
}
这不回答你的问题,但你有没有考虑创建一个双向链表?如果将'n-prev'指针添加到'node',则每次将项添加到列表末尾时,您都不必遍历整个列表。 –
我还没有学过双向链表。我正在努力工作。谢谢你的提示。 :) – JosephK
你已经确定了单链表的主要弱点。有一些非常特殊的场景,以线性方式从头到尾遍历,完美地模拟所需的功能。就像,一个foreach块将如何处理每个语句从开始到结束,除非您添加一个退出条件来打破循环。双向链表的工作原理相同,但包含引用和指针。它增加了更多的开销,但在某些特定情况下,与单链表相同的方式很有用。 –