C/C++ 创建两个链表,实现两个链表高位到低位相加,并输出链表
效果图
链表结构体的定义
struct listnode {int data;listnode* next;listnode(int x) : data(x), next(NULL) {}
};
创建链表
void createlist(listnode* head, int i)
{listnode* p;while (i--){int value;printf("请输入节点值:");scanf("%d", &value);listnode *p=new listnode(0);p->data = value;p->next = head->next;head->next = p;head = head->next;}
}
翻转函数
listnode *reverse(listnode *head)
{listnode *newhead = NULL;while (head != NULL) {listnode *temp = head->next;head->next = newhead;newhead = head;head = temp;}return newhead;
}
链表相加函数
void add(listnode *l1,listnode *l2)
{listnode *dummy = new listnode(-1);listnode *p1 = reverse(l1);listnode *p2 = reverse(l2);listnode *p = dummy;int flag = 0;while (p1 != NULL || p2 != NULL) {int temp = flag;if (p1 != NULL) {temp += p1->data;p1 = p1->next;}if (p2 != NULL) {temp += p2->data;p2 = p2->next;}if (temp > 9) {temp -= 10;flag = 1;} else {flag = 0;}p->next = new listnode(temp);p = p->next;}if (flag == 1) {p->next = new listnode(1);}printlist(dummy->next);
}
输出函数
void printlist(listnode* head)
{printf("相加之后整个单链表元素为:\n");while (head->next){printf("%d ", head->next->data);head = head->next;}printf("\n");
}
主函数
int main()
{listnode *head1 = new listnode(0);head1->next = NULL;listnode *head2 = new listnode(0);head2->next = NULL;int n1,n2;printf("请输入链表1的长度:");scanf("%d", &n1); printf("请输入第一个链表:\n");createlist(head1, n1);printf("请输入链表2的长度:");scanf("%d", &n2); printf("请输入第二个链表:");createlist(head2, n2);add(head1,head2);return 0;
}
源代码
#include<stdio.h>
#include<stdlib.h>
struct listnode {int data;listnode* next;listnode(int x) : data(x), next(NULL) {}
};
void createlist(listnode* head, int i)
{listnode* p;while (i--){int value;printf("请输入节点值:");scanf("%d", &value);listnode *p=new listnode(0);p->data = value;p->next = head->next;head->next = p;head = head->next;}
}
void printlist(listnode* head)
{printf("相加之后整个单链表元素为:\n");while (head->next){printf("%d ", head->next->data);head = head->next;}printf("\n");
}
listnode *reverse(listnode *head)
{listnode *newhead = NULL;while (head != NULL) {listnode *temp = head->next;head->next = newhead;newhead = head;head = temp;}return newhead;
}
void add(listnode *l1,listnode *l2)
{listnode *dummy = new listnode(-1);listnode *p1 = reverse(l1);listnode *p2 = reverse(l2);listnode *p = dummy;int flag = 0;while (p1 != NULL || p2 != NULL) {int temp = flag;if (p1 != NULL) {temp += p1->data;p1 = p1->next;}if (p2 != NULL) {temp += p2->data;p2 = p2->next;}if (temp > 9) {temp -= 10;flag = 1;} else {flag = 0;}p->next = new listnode(temp);p = p->next;}if (flag == 1) {p->next = new listnode(1);}printlist(reverse(dummy->next));
}
int main()
{listnode *head1 = new listnode(0);head1->next = NULL;listnode *head2 = new listnode(0);head2->next = NULL;int n1,n2;printf("请输入链表1的长度:");scanf("%d", &n1); printf("请输入第一个链表:\n");createlist(head1, n1);printf("请输入链表2的长度:");scanf("%d", &n2); printf("请输入第二个链表:");createlist(head2, n2);add(head1,head2);return 0;
}
C/C++ 创建两个链表,实现两个链表高位到低位相加,并输出链表相关推荐
- java链表的输出_Java输出链表倒数第k个节点
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- Java 输出链表的第一个和最后一个元素
使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlistname.getLast() 来获取链表的第一个和最后一个元素 完整代码 import j ...
- C语言之动态创建链表的两种方式
之前我们说的链表是基于静态创建的,但静态创建的链表很不灵活而且在工作中的项目中的很多场景都不适合,所以我们来记录一下链表的两种动态创建的方式. 1.方式一:链表动态创建之头插法 那么我们直接上代码讲: ...
- 数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题
数据结构与算法复制含有随机指针节点的链表和两个链表相交的一系列问题 目录 复制含有随机指针节点的链表 两个链表相交的一系列问题 1. 复制含有随机指针节点的链表 题目概述 思路:创建一个HashMap ...
- 链表——24. 两两交换链表中的节点
1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 2 题目示例 示例 2: 输入 ...
- 链表:链表分割问题:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
链表分割: 以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前,注意:数据的顺序不改变. 代码实现: 链表的定义: typedef int SListDataType; t ...
- java三位整数倒序相加_用单向链表实现两数倒序相加(java实现)
很久没做算法题了,准备重操旧业,于是刷了一波LeetCode,看到一个比较经典的链表算法题,分享出来. 题目 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将 ...
- 链表实现两个多项式的加法
最近遇到这样一个题目,使用链表来实现两个多项式的加法,刚开始觉得应该比较简单,也可能是自己基础不扎实吧,这其中也是踩了很多的坑啊,最终还是成功了,特此写博客记录一下. 一.题目要求 使用链表来实现两个 ...
- 小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?通过该试验加深对句柄的理解!!...
小实验:用创建进程()打开计算器,然后关闭进程句柄.再用打开进程(进程ID),使用两次,得到两个进程句柄.实验目的:这两个进程句柄都能控制这个进程吗? .版本 2 .程序集 窗口程序集1 .子程序 _ ...
- LeetCode 23合并K个升序链表24两两交换链表中的节点
维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...
最新文章
- TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
- Xshell dns tunnel攻击
- 【百家稷学】深度学习计算机视觉生产实习(山西农业大学暑期实训)
- 工作的习惯,看到好收藏下
- 【KERAS/直方图均衡化】图像数据集扩充
- 推荐+1置顶+1(分享、讨论、实现)通用软件注册功能之建立有效的软件保护机制...
- 沣西新城大数据产业园:打造大数据全生态链
- 【linux】ssh 远程执行命令
- 分享java web 期末项目实验源码20套,BBS论坛,ERP管理系统,OA自动化等等
- 跨境电商亚马逊店铺到底需不需要ERP系统啊?
- vuecli工程里面引入图片
- js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
- 基于libmemcached为php扩展memcached服务
- C语言学习IDE和基本程序结构
- 海湾标准汉字码表查询_JBQGGST5000标准汉字码表
- php 调用redfish,Huawei iBMC 通过redfish接口设置KVM key登录html5远程控制台操作记录
- 二维码自动生成器批量将表格整行数据制作二维码
- 基于QT的IM(jabber)库和客户端
- kmeans算法python代码_kmeans算法用Python怎么实现
- Java - 两个对象值相同(x.equals(y) == true),但却可以有不同的hash code,这句话对不对?
热门文章
- Centos7搭建虚拟用户FTP
- iOS 关于布局问题的一些认识
- 窗口及元素尺寸大小位置获取方法记录
- 聚类分析二:DBSCAN算法
- 数据库--MyBatis的(insert,update,delete)三种批量操作
- C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;...
- 如何在Byte[]和String之间进行转换
- CouchDB 1.3.0的新特性以及算法的强化
- 哈工大SCIR Lab | EMNLP 2019 结合单词级别意图识别的stack-propagation框架进行口语理解...
- 初学者|一起来看看词性标注