第1章第2节练习题17 使用相同值结形成新单链表
来源:互联网 发布:htpp 123js.cn 编辑:程序博客网 时间:2024/04/27 22:56
问题描述
设A和B是两个单链表(带头结点),其中元素按递增有序。设计一个算法从A和B中公共元素产生单链表C,要求不破坏A,B的结点
算法思想
本算法实际上和第1章第2节练习题16 归并并逆序单链表并没有太大的区别,同样对两张链表进行遍历,对于具有相同值的结点进行一次复制,然后将复制出来的新节点采用尾插法建立单链表的方式形成新的单链表。
算法描述
LinkList CreatNew(LNode *head1, LNode *head2, LNode *head){ LNode *p=head1->next; LNode *q=head2->next; LNode *r=head; LNode *L; while(p&&q){ if(p->data==q->data){ L=(LNode*)malloc(sizeof(LNode)); L->data=p->data; r->next=L; r=L; p=p->next; q=q->next; }else if(p->data<q->data){ p=p->next; }else{ q=q->next; } } r->next=NULL; return head;}
具体代码见附件。
附件
#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;LinkList CreatList(LNode*);LinkList CreatNew(LNode*,LNode*,LNode*);void Print(LNode*);int main(int argc, char* argv[]){ LNode *head1; head1=(LNode*)malloc(sizeof(LNode)); head1->next=NULL; head1=CreatList(head1); LNode *head2; head2=(LNode*)malloc(sizeof(LNode)); head2->next=NULL; head2=CreatList(head2); LNode *head; head=(LNode*)malloc(sizeof(LNode)); head=CreatNew(head1, head2, head); Print(head1); Print(head2); Print(head); return 0;}//尾插法建立单链表LinkList CreatList(LNode* head){ LNode *L; LNode *r=head; ElemType x; scanf("%d",&x); while(x!=999){ L=(LNode*)malloc(sizeof(LNode)); L->data=x; r->next=L; r=L; scanf("%d",&x); } return head;}//查找公共结点LinkList CreatNew(LNode *head1, LNode *head2, LNode *head){ LNode *p=head1->next; LNode *q=head2->next; LNode *r=head; LNode *L; while(p&&q){ if(p->data==q->data){ L=(LNode*)malloc(sizeof(LNode)); L->data=p->data; r->next=L; r=L; p=p->next; q=q->next; }else if(p->data<q->data){ p=p->next; }else{ q=q->next; } } r->next=NULL; return head;}//打印所有结点void Print(LNode *head){ LNode *p=head->next; while(p){ printf("%4d",p->data); p=p->next; } printf("\n");}
0 0
- 第1章第2节练习题17 使用相同值结形成新单链表
- 第2章练习题1
- 第1章第2节练习题6 反向输出
- 第1章第2节练习题7 递减输出
- 第1章第2节练习题11 就地逆置单链表
- 第1章 形成Becoming
- 第2章练习题
- 第1章练习题
- 第2章第2节练习题2 使用栈模拟队列操作
- 第2章第2节练习题3 使用队列模拟渡口管理
- JSP 第1、2章 练习题
- 第1章第1节练习题1 删除最小值
- 第1章第1节练习题10 查找中位数
- 第3章第1节练习题1 蛇形矩阵
- 第2章练习题9
- 第1章第1节练习题4 有序表删除指定区间值
- 第1章第1节练习题5 无序表删除指定区间值
- 第1章第1节练习题6 删除重复值
- CentOS7下搭建Zabbix2.2
- 在vps上搭建代理服务器
- IOS应用开发版本控制工具之Versions 和SVN 的 使用方法详解
- .lo后缀文件
- Javascript面向对象编程(二):构造函数的继承
- 第1章第2节练习题17 使用相同值结形成新单链表
- tomcat 日志用log4j管理
- osgi中的bundle之间互相服务
- cannot do a partial commit during a merge.
- 在unity中调用某个程序运行
- Lua - coroutine 状态与数据交换
- iOS项目的完整重命名方法图文教程
- MyEclipse更换背景主题方案
- HDOJ 1312-Red and Black【基础DFS】