数据结构——2 单链表插入和删除节点

单链表——插入和删除节点


创建单链表,并输出链表,插入/删除结点元素。

#include<iostream>
using namespace std;
struct node       //node结构体,里面有一个node指针,用来指向下一个node对象
{
	int x;
	node *next;   //指向什么类型的对象,就用什么类型的指针
};

node* create(int n)         //创建链表,参数n表示结点的个数,返回类型是结点指针node*
{
	node *head=new node;    //建立头结点
	node *p=head;           //创建用于往后指的node指针


	for(int i=0;i<n;i++)
	{
		node *temp=new node;     //new一个node指针
		temp->x=rand()%100;
		p->next=temp;            //将p的next指向创建的temp,把新节点连接到链表后面
		p=temp;                  //将p指向新结点temp,即p移动到下一个节点
	}
	p->next=NULL;                //创建完成后,p->next指向NULL

	return head;
}

void display(node *head)         //输出链表
{
	node *p;
	p=head->next;                //p重新指向头结点后的那个结点,即for循环创建的第一个结点
	if(p==NULL)
		cout<<"NULL List";
	while(p!=NULL)               //输出
	{
		cout<<p->x<<"  ";
		p=p->next;
	}
	cout<<endl;
}

void insert(node *head,int pos,int data)      //链表中插入结点,参数pos表示插入的位置,参数data表示插入的值
{
	pos--;                       //while循环中,每次执行都将p指向下一个结点,所以提前减一个
	node *p;
	p=head->next;                //p重新指向头结点后的那个结点,即for循环创建的第一个结点


	while(--pos)                 //找到插入结点的位置
		if((p=p->next)==NULL)
		{
			cout<<"incorrect position"<<endl;
			break;
		}


	node *temp=new node;         //new一个新结点temp
	temp->x=data;                //赋值
	temp->next=p->next;          //新结点的next指针指向插入位置的下一个结点
	p->next=temp;                //插入位置的上一个结点指向新结点


}

void remove(node *head,int pos)      //链表中删除结点,参数pos表示删除的位置
{
	pos--;
	node *p,*temp;
	p=head->next;                //p重新指向头结点后的那个结点,即for循环创建的第一个结点


	while(--pos)                 //找到插入结点的位置前一个结点
		if((p=p->next)==NULL)
		{
			cout<<"incorrect position"<<endl;
			break;
		}
	temp=p->next;                //标记将要删除的点
	
	p->next=p->next->next;       //越过要删除的结点,链表连起来
	delete []temp;               //将内存释放


}


int main()
{
	node *list; 
	list=create(10);           //建立链表
	display(list);             //输出显示建立的链表


	insert(list,4,20);         //指定位置插入结点
	display(list);


	insert(list,8,20);
	display(list);


	remove(list,6);            //指定位置删除节点
	display(list);
	
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章