链表的一些基础题
发布日期:2021-06-29 11:11:38
浏览次数:2
分类:技术文章
本文共 3127 字,大约阅读时间需要 10 分钟。
1;程序;线性表ab为按元素递增有序排列的;
程序目的;合并ab在原链表结构上,并然保持递增序列;没有相同值节点,在a链表的基础上。 2; 原地倒置;传递指向头节点的指针/* 程序;线性表ab为按元素递增有序排列的; 程序目的;合并ab在原链表结构上,并然保持递增序列;没有相同值节点 在a链表的基础上。*/#include#include typedef struct node{ int elem; struct node*next;}Node;void Creat_lb(Node * s, int m);void Print_lb(const Node *s);void marge_lb(Node *a, Node *b);int main(){ Node a,b; int num_a,num_b; printf("请输入链表a的项数\n"); scanf("%d",&num_a); Creat_lb(&a,num_a); //Print_lb(&a); printf("请输入链表b的项数\n"); scanf("%d",&num_b); Creat_lb(&b,num_b); printf("输出链表a并b\n"); marge_lb(&a,&b); Print_lb(&a); return 0;}void marge_lb(Node *a, Node *b){ Node * pa, *pb, *pc, *pb1=NULL; pa = a->next; pb = b->next; pc = a;//在a链表的基础上修改 while(pa != NULL && pb != NULL){ if(pa->elem < pb->elem){ pc->next = pa; pc = pa; pa = pa->next; } else if(pa->elem > pb->elem){ pc->next = pb; pc = pb; pb = pb->next; } else{ pc->next = pa; pc = pa; pa = pa->next; pb1 = pb; pb = pb->next; free(pb1);//将这个节点内存释放。 } } if(pa == NULL){ while(pb != NULL){ pc->next = pb; pc = pb; pb = pb->next; } } else{ while(pa != NULL){ pc->next = pa; pc = pa; pa = pa->next; } }}void Creat_lb(Node * s, int m){ Node *p, *q; q = s; for(int i = 0; i < m; i++){ p = (Node *)malloc(sizeof(Node)); scanf("%d",&p->elem); p->next = NULL; q->next = p; q = p; }}void Print_lb(const Node *s){ Node * p; p = s->next; while(p!=NULL){ printf("%d ",p->elem); p = p->next; }}
/* 程序;链表的就地逆置*/#include#include typedef struct node{ int elem; struct node* next;}Node;void Creat_lb(Node *s,int m);void Print_lb(const Node *s);void Inversion_lb(Node * s);int main(){ Node a; Creat_lb(&a,4); Inversion_lb(&a); Print_lb(&a); return 0;}/* 原地倒置;传递指向头节点的指针 1;思想就是头插法思想, 2;注意要先将一个节点插入(将第二个节点插入第一个节点和头结点之间) 之后的指向就是。q依然指向头结点。p1指向第二个节点,p指向第三个节点(也就是下次即将插入的节点) 其余节点则可以使用while循环; 3;*/void Inversion_lb(Node * s){ Node * p, *q, *p1; q = s;//q始终是指向头结点的。 p = s->next;//p为插入前节点的前一个节点; if(p->next == NULL){ return ; } q->next = p;//先插入一个节点 p1 = p->next; p->next = NULL;//这就是最后一个节点要使得next=NULL; p = p1->next; p1->next = q->next; q->next = p1; while(p!=NULL){ p1 = p;//p1指向的是要插入的节点 p = p->next;//p指向的是下一个要插入的节点 p1->next = q->next;//插入的两个步骤,1.这个节点与后面链表的链接 q->next = p1;//这个节点与头结点的链接; }}void Creat_lb(Node *s,int m){ Node *p,*q; p = s; for(int i = 0; i < m; i++){ q = (Node *)malloc(sizeof(Node)); scanf("%d",&q->elem); q->next = NULL; p->next = q; p = q; }}void Print_lb(const Node *s){ Node * p; p = s->next; while(p != NULL){ printf("%d ",p->elem); p = p->next; }}
转载地址:https://blog.csdn.net/zw1996/article/details/54693222 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 18时18分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
双指针-45. 反转字符串中的元音字母
2019-04-29
双指针--环形链表
2019-04-29
python 模块化__init__.py-------__all__
2019-04-29
无重叠区间+用最少数量的箭引爆气球
2019-04-29
买卖股票的最佳时机
2019-04-29
非递减数列
2019-04-29
AUC粗浅理解笔记记录
2019-04-29
分治法:241. 为运算表达式设计优先级
2019-04-29
广度优先遍历:二进制矩阵中的最短路径
2019-04-29
广度优先遍历:set集合的速度远远比list快:完全平方数
2019-04-29
广度+深度:岛屿的最大面积/岛屿数量
2019-04-29
torch 模型运行时间与forward没对应的可能原因
2019-04-29
130. 被围绕的区域
2019-04-29
欧式距离、余弦相似度和余弦距离
2019-04-29
transform 等效转换(参考源码)
2019-04-29
cv2 PIL区别笔记
2019-04-29
C#中的委托
2019-04-29
引用类型和值类型
2019-04-29
一个合格程序员该做的事情——你做好了吗?
2019-04-29
再谈如何表现已点击的链接2
2019-04-29