关于双向链表之插入+删除

双向链表插入 +删除

在双向链表逆序创建好的基础上实现对双向链表的插入和删除。。。
奉上俺的代码:
#include<iostream>
using namespace std;
struct node{
	int data;
	node *pre;
	node *next;
};
int main()
{
	int a[10]={1,2,3,4,5};
	node *L=NULL;
	node *h=new node;
	node *L1=new node;
	L=NULL;
        L1->next =L;
	L=L1;
	for(int i=0;i<5;i++){
		node *L1=new node;
		L->data =a[i];
		L->pre =L1;
		L1->next =L;
		L=L1;
	}
	L->pre =NULL;
	int n;
	node *s=new node;//s为插入的结点
	cin>>n;
	s->data =n;
	s->pre=L1->pre;//插入结点的*pre指向插入位置L1的*pre所指向的结点
        s->next=L1;//s结点指向L1结点
//改变了s结点的两个方向上的指针,再来改变L1结点的两个方向上的指针//
        L1->pre->next =s;
        L1->pre=s;
while(L1->pre){cout<<L1->data <<" ";L1=L1->pre ;} return 0;}

输入:3输出:1 3 2 3 4 5前面创建双向链表不解释(见上文)。前插法:在带头结点的双向链表L中L1结点之前插入S结点。(后插法把*pre和*next 交换即可)在双向链表中进行插入操作是,必须同时修改两个方向上的指针,实现插入操作的这四步,顺序不唯一,只要遵循改变该结点的*pre和*next的指针即可。无需再用while语句找(插入位置)L1的前驱。。。删除操作同样改变删除结点的两个方向上的指针即可。关键代码:
int m;
cin>>m;
if(m==L1->data){
L1->pre->next=L1->next;
L1->next->pre=L1->pre;
delete L1;
}

该算法实现了删除值为m的L1结点。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值