标签:
双链表的创建/删除/插入/打印操作
#include <iostream> using namespace std; struct node { int data; node *next; node *pre; }; //(1)创建双链表 node *create() { node *head,*p,*s; int x; char c; head=new node; p=head; cout<<"please input the datas:"<<endl; while(cin>>x) { s=new node; s->data=x; p->next=s; s->pre=p; p=s; cin.get(c); if(c==‘\n‘) break; } head=head->next; head->pre=NULL; p->next=NULL; return head; } //(2)打印双链表 void print_list(node *head) { node *p; p=head; while(p!=NULL) { cout<<p->data<<endl; p=p->next; } } //(3)双链表的删除节点操作 node *delete_node(node *head,int num) { node *p; p=head; while(num!=p->data && p->next!=NULL) { p=p->next; //跟单链表删除的区别:不需要一个指针p2来保存p的前驱节点 } if(num==p->data) { if(p==head) { head=head->next; head->pre=NULL; delete p; } else if(p->next==NULL) { p->pre->next=NULL; delete p; } else { p->next->pre=p->pre; p->pre->next=p->next; delete p; } } else cout<<"not found"<<endl; return head; } //(4)双链表的插入操作 node *insert_node(node *head,int num) { node *p=head; node *p2; p2=new node; while(p->data<num && p->next!=NULL) { p=p->next; } if(p->data>=num) { if(p==head) { p2->data=num; p->pre=p2; p2->next=p; p2->pre=NULL; head=p2; } else { p2->data=num; p2->pre=p->pre; p2->next=p; p->pre->next=p2; } } else { //p->next->data=num; //p->next->pre=p; //p->next->next=NULL; p2->data=num; p->next=p2; p2->pre=p; p2->next=NULL; } return head; } int main() { node *p=create(); print_list(p); //node *p1=delete_node(p,1); //print_list(p1); node *p2=insert_node(p,3); print_list(p2); return 0; }
标签:
原文地址:http://www.cnblogs.com/riden/p/4564438.html