这是我为节点和链接列表创建的类
#include <iostream>
#include <string>
#include <iomanip>
#include <stdio.h>
using namespace std;
//template <class Object>
//template <class Object>
class Node
{
//friend ostream& operator<<(ostream& os, const Node&c);
public:
Node( int d=0);
void print(){
cout<<this->data<<endl;
}
//private:
Node* next;
Node* prev;
int data;
friend class LinkList;
};
Node::Node(int d):data(d)
{
}
//template <class Object>
class LinkList
{
public:
//LinkList();
LinkList():head(NULL),tail(NULL),current(NULL){}
int base;
//LinkList(const LinkList & rhs, const LinkList & lhs);
~LinkList(){delete head,tail,current;}
const Node& front() const;//element at current
const Node& back() const;//element following current
void move();
void insert (const Node & a);//add after current
void remove (const Node &a);
void create();
void print();
private:
Node* current;//current
Node* head;
Node* tail;
};
void LinkList::print()
{
Node *nodePt =head;
while(nodePt)
{
cout<<"print function"<<endl;
cout<<nodePt->data<<endl;
nodePt=nodePt->next;
}
}
//element at current
void LinkList::create()
{
Node start(0);
}
const Node& LinkList::back()const
{
return *current;
}
//element after current
const Node& LinkList::front() const
{
return *current ->next;
}
void LinkList::move()
{
current = current ->next;
}
//insert after current
void LinkList :: insert(const Node& a)
{
Node* newNode= new Node();
newNode->prev=current;
newNode->next=current->next;
newNode->prev->next=newNode;
newNode->next->prev=newNode;
current=newNode;
}
void LinkList::remove(const Node& a)
{
Node* oldNode;
oldNode=current;
oldNode->prev->next=oldNode->next;
oldNode->next->prev=oldNode->prev;
delete oldNode;
}
#include <iostream>
#include <string>
#include <iomanip>
#include <stdio.h>
#include "LinkedList.h"
using namespace std;
int main()
{
int n;
cout<<"How many Nodes would you like to create"<<endl;
cin>>n;
Node a(n);
Node b(n+1);
a.print();
a.next=&b;
LinkList list1 ;
list1.create();
list1.print();
list1.insert(0);
list1.print();
//for(int i=0 ;i<n;i++)
//{
//list1.insert(i);
//}
我想创建一个双循环链表,但我现在在创建实际链表时遇到了问题。是类的问题吗。同样,对于赋值,列表被假设为一个模板类,但现在我只想让代码发挥作用。我不知道如何正确创建链接列表。
1-您必须缩进代码,在发布之前将其清理干净!!
2-具体地回答你的问题,我没有理解你的问题
不管怎样,我看到了代码,我注意到了很多事情,可能它们不是你的问题
1-创建函数的作用是什么?我看到它什么都不做,根据你的逻辑-正如我所猜测的-你应该通过使用参数来初始化这个函数中的头、尾和电流,或者如果它什么都没做,就忽略这个函数,然后在插入函数的开头处理插入的情况,这是你的第二个问题
2-你的插入函数应该注意一些条件,在列表的开头和末尾插入
例如,如果在末尾插入,则"newNode->next->prev"语句将无效,因为您的next now为空
不要忘记在处理这些条件后保持头部和尾部的更新
为什么要在插入函数的末尾更新current?尽管你可以避免它的问题,但我认为它在逻辑上是不可接受的,最好让"插入"的角色只是插入,特别是当你有移动功能时
3-在删除功能中,您应该处理与上述相同的删除功能条件
4-在主要功能中:这些线是干什么的?!!!
Node a(n);
Node b(n+1);
a.print();
a.next=&b;
我不知道他们是否只是节点类的测试行,如果不是,你应该注意到,按照链表的大小创建节点根本不是逻辑的,我真的不知道这样做的原因!!
如果节点和链表之间有任何冲突,请小心!
再次修改您的所有代码,并注意您可能面临的情况。
希望我能帮助