定义链表的节点
typedef struct node //定义链表节点相关结构体
{
int data;
struct node *next;
node(int x) : //构造函数,用于在创建对象时初始化对象的各个成员
data(x), next(NULL){
}
}Node;
定义链表结构体
struct linklist //定义链表结构体
{
public:
void create()
{
head = new Node(0); //初始化头节点,即调用了上面的构造函数,使head->data=0,head->next=NULL
if(head == NULL) //内存已满的情况下,无法给头节点分配地址,报错
{
cout << "new failed" << endl;
return;
}
}
void insert(int m_data) //头插法
{
Node *m_new = new Node(0); //创建一个新的节点
if(m_new == NULL)
{
cout << "new failed" << endl;
return;
}
m_new->data = m_data;
m_new->next = NULL; //这条语句可以省略
m_new->next = head->next; //将新节点插入到头节点后
head->next = m_new;
}
void show()
{
Node *p = head->next;
while(p != NULL) //循环遍历链表打印每一个节点数据
{
cout << p->data << " ";
p = p->next;
}
cout << endl; //换行
}
private:
Node *head;
};
上面这一串代码建立了链表结构体,但其中insert采用的是头插法,下面展示一下尾插法该怎么写
void insert(int m_data) //尾插法
{
Node *m_new = head; //创建一个新的节点并指向头节点
Node *p = new node(0);
if(p== NULL)
{
cout << "new failed" << endl;
return ;
}
while(m_new->next!=NULL){ //使m_new指针指向最后一个节点
m_new = m_new->next;
}
m_new->next = p;
p->data = m_data;
}
在主函数中进行调用
int main()
{
struct linklist list;
list.create();
int n = 10;
while(n--)
{
list.insert(n);
}
list.show();
return 0;
}