双向链表的创建,添加与删除
来源:互联网 发布:linux 查看mysql日志 编辑:程序博客网 时间:2024/06/05 08:50
问题描述:1.生成双向链表:根据给定的数组元素,生成双向链表,并返回双向链表的头结点。
2.双向链表尾部添加元素:给定一个元素,在双向链表的尾部添加一个新的元素。
3.移除元素:给定一个元素,删除双向链表中与之值相等的节点。
注意事项:链表为空(添加);链表仅有一个头结点(删除)。
代码如下:
#include <iostream>using namespace std;struct DoubleListNode{ int value; DoubleListNode *next; DoubleListNode *piror;};//创建双向链表DoubleListNode* createDoubleList(int *array, int length){ DoubleListNode *p,*q,*pHead; q=pHead=new DoubleListNode(); pHead->piror=NULL; if(length==0) pHead==NULL; else { for(int i=0;i<length;i++) { p=new DoubleListNode(); p->value=array[i]; q->next=p; p->piror=q; q=p; //链表的值跟数组中的值顺序相反 } q->next=NULL; }return pHead;}void AddToTail(DoubleListNode *pHead,int value){ DoubleListNode *p=new DoubleListNode(); p->value=value; p->next=NULL; p->piror=NULL; if(pHead==NULL) pHead=p; else { DoubleListNode *p1=pHead; while(p1->next!=NULL) p1=p1->next; p1->next=p; p->piror=p1; p->next=NULL; }}void RemoveNode(DoubleListNode *pHead, int value){ if(pHead==NULL) { cout<<"没有满足条件的节点!"<<endl; return; } DoubleListNode *p=pHead; DoubleListNode *pToBeDeleted=NULL; //如果头指针等于要删除的节点的值时,需要特殊处理 if(pHead->value==value) { pToBeDeleted=pHead; if(pHead->next!=NULL) pHead=pHead->next; }while(p->next!=NULL&&p->next->value!=value) p=p->next;if(p->next!=NULL&&p->next->value==value) { pToBeDeleted=p->next; p->next->next->piror=p; p->next=p->next->next; } else cout<<"没有满足条件的节点!"<<endl;if(pToBeDeleted!=NULL){ delete pToBeDeleted; pToBeDeleted=NULL;}}void PrintList(DoubleListNode *pHead){ if(pHead==NULL) cout<<"链表为空"<<endl; else { DoubleListNode *p=pHead; while(p!=NULL) { cout<<p->value<<ends; p=p->next; } } cout<<""<<endl;}int main(){ int a[7]={1,2,3,4,5,6,7}; DoubleListNode *pHead=createDoubleList(a,7); cout<<"新生成的链表中元素为:"<<endl; PrintList(pHead); AddToTail(pHead,8); cout<<"添加至尾部后链表中元素为:"<<endl; PrintList(pHead); RemoveNode(pHead, 4); cout<<"移除元素后链表中元素为:"<<endl; PrintList(pHead); // cout << "Hello world!" << endl; return 0;}
0 0
- 双向链表的创建,添加与删除
- 双向循环链表的创建,插入与删除。
- 双向链表的创建查找与删除元素
- 约瑟夫问题--双向循环链表的创建与删除
- 双向链表的创建和删除
- 双向链表的创建删除
- 双向链表的创建删除
- 双向链表的创建/插入/删除
- Java双向链表的创建结点,清空链表,添加结点,删除结点
- 双向链表的插入与删除
- 双向链表的插入与删除
- 双向链表的创建、结点的插入、删除与打印
- 双向循环链表的建立、查找、添加、删除
- 双向循环链表的创建,插入,删除操作
- 双向循环链表的创建修改插入删除操作
- C++实现双向链表的创建,插入,修改,删除
- 单链表,双向链表的插入,查询,创建,删除,输出
- 双向链表创建、插入、删除
- Android中使用WIFI来连接ADB
- 网站通过IE自定义协议打开客户端
- linux下使用 TC 对服务器进行流量控制
- ubuntu_mysql怎么判断自己的库和头文件的位置
- 查看隐含参数
- 双向链表的创建,添加与删除
- 360安全卫士2014 v9.6.0.1003e 官方版
- android 获取进程、服务、任务列表
- 嵌入式老鸟畅聊210开发板
- ThinkPHP初体验
- 360安全卫士xp专版 v9.6 官方版
- Objective-C消息机制的原理
- 猎豹免费wifi校园神器 v2.0.140227 校园网专版
- how to install scikit-learn