双向链表插入 +删除
在双向链表逆序创建好的基础上实现对双向链表的插入和删除。。。
奉上俺的代码:
奉上俺的代码:
#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所指向的结点
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的前驱。。。删除操作同样改变删除结点的两个方向上的指针即可。关键代码:s->next=L1;//s结点指向L1结点 //改变了s结点的两个方向上的指针,再来改变L1结点的两个方向上的指针// L1->pre->next =s; L1->pre=s;
该算法实现了删除值为m的L1结点。int m; cin>>m; if(m==L1->data){ L1->pre->next=L1->next; L1->next->pre=L1->pre; delete L1; }