数据结构——12 删除两个双向链表中相同的节点
来源:互联网 发布:html5数据统计模板 编辑:程序博客网 时间:2024/06/07 02:45
双向链表——删除两个双向链表中相同的节点
这个程序没写好,写成了一坨屎
#include<iostream>using namespace std;struct node //node结构体,里面有两个个node指针,用来指向上/下一个node对象{int x;node *left; //指向什么类型的对象,就用什么类型的指针node *right;};node* create(int n) //创建链表,参数n表示结点的个数,返回类型是结点指针node*{if(n<1) //参数检测,链表最少有一个节点{cout<<"error input n!"<<endl;exit(0);}node *head=new node; //建立头结点node *p=head; //创建用于往后指的node指针for(int i=1;i<=n;i++){node *temp=new node; //new一个node指针temp->x=rand()%10;p->right=temp; //将p的right指向创建的temp,把新节点连接到链表后面temp->left=p; //temp的left指向p,新节点left指向上一个节点p=temp; //将p指向新结点temp,即p移动到下一个节点}p->right=NULL; //创建完成后,p->right为空,最后一个节点的right位nullhead->right->left=NULL; //创建完成后,第一个节点的left为nullreturn head;}void display(node *head) //输出链表{node *p;p=head->right; //p重新指向头结点后的那个结点,即for循环创建的第一个结点if(p==NULL)cout<<"NULL List";while(p!=NULL) //输出{cout<<p->x<<" ";p=p->right;}cout<<endl;}node* findSame(node *head1,node *head2) //找到相同的节点,放入same链表中{node *p=head1->right;node *s;node *same=new node; //要存放数据,所以这里要new一个头节点node *t=same;while(p) //外循环遍历{s=head2->right; //每次内循环从head2链表第一个节点开始遍历while(s){if(p->x==s->x) //相等,则存入same链表中{node *temp=new node;temp->x=p->x;t->right=temp; //右连接temp->left=t; //左连接t=temp; //移动t指向现在same的最后一个节点}s=s->right;}p=p->right;}t->right=NULL; //same最后一个节点的右面为nullreturn same;}void deleteSame(node *head, node *same) //删除head链表中与same相同的节点{node *p;node *s=same->right; //p重新指向头结点后的那个结点,即for循环创建的第一个结点node *temp1,*temp2;while(s) //如果head的第一个节点,和same中有相同,则删除,目的是让head的第一个节点与same链表中节点都不同{ //因为head的头节点可以指向第一个节点,但第一个节点不能指向头结点,这是链表创建时决定的p=head->right;if(p->x==s->x) {head->right=p->right; //如果相同,head直接指向相同结点的下一个结点p->right->left=NULL;}s=s->right;}s=same->right; //从same的第一个结点开始遍历p=head->right;while(s){while(p){if(p->x==s->x) //这里有一个bug,没有处理左连接p->left->right=p->right;p=p->right;}s=s->right;}}int main(){node *list1,*list2; list1=create(6); //建立链表display(list1); //输出显示建立的链表,这里是讯链表,不用输出list2=create(8); //建立链表display(list2); //输出显示建立的链表,这里是讯链表,不用输出cout<<endl;node *same=findSame(list1,list2); //输出相同的节点display(same);cout<<endl;deleteSame(list1,same);deleteSame(list2,same);display(list1);display(list2);return 0;}
0 0
- 数据结构——12 删除两个双向链表中相同的节点
- 删除两个双向循环链表中具有相同值的节点
- 删除两个双向链表中相同元素的所有节点
- 删除两个双向循环链表的相同节点
- 删除两个双向循环链表的相同节点
- 删除两个双向循环链表的相同节点
- 删除两个双向循环链表的相同节点
- 删除两个双向链表值相同的结点
- 两个双向链表,删除data成员值相同的节点。
- 雅虎面试题─将两个双向循环链表中data值相同的结点删除
- 两个双向链表删除相同元素
- 数据结构——11 有序双向链表中插入节点
- 数据结构——10 双向链表插入和删除节点
- 数据结构—— 二叉树数据结构的节点删除问题
- 删除两个双向链表中值相同的结点--无空白头结点
- 删除两个双向链表中值相同的结点--带空白头结点
- 经典面试题--两个双向链表删除相同值
- 数据结构杂记——无头单链表的节点删除
- ORA-01400: 无法将 NULL 插入 可能有的错误
- 如何给现有的PDF文件添加页码
- apache WordPress 伪静态.htaccess出现403 Forbidden Error
- 如何让IIS 能响应HTTP PUT和DELETE请求
- struts2 Action获取request,session,application
- 数据结构——12 删除两个双向链表中相同的节点
- localhost、Tomcat的localhost:8080拒绝访问解决方案(win10系统)
- c#:通过MD5得到文件和String的校验值
- SQLServer 事务复制分发错误 The process could not connect to Subscriber
- HDU 4452 Running Rabbits
- videoPlayer
- 数据库中INFORMATION_SCHEMA的说明及使用
- 在覆盖toString()方法中使用this所发现的有趣的现象
- 笔记:Jsp页面国际化 – 使用jstl标签