链表求和(C语言)

简介: 链表求和(C语言)

题目:链表求和

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),

即617 + 295 输出:2 -> 1 -> 9,即912


思路:此题主要考察对链表的操作,借助链表的形式完成两数求和。求解过程为,每次取两个链表的对应节点,求和之后将其放入新节点,并尾部插入到新链表,因为链表是反向存储,直到将两个链表求解结束,值得注意的是,两个数的长度不一定相同,所以在一个链表结束之后,还需判断另一个链表是否是有剩余节点。


参考:

/*
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//定义全局变量p指向每次插入节点的前驱节点,方便在addItem函数中进行节点链接
struct ListNode *p = NULL;
//完成每一项相加,并进行节点链接,进位sign采用地址传递,因为函数内部会修改进位并在下一次计算时进行使用
void addItem(int a, int b, int *sign)
{
struct ListNode *s = (struct ListNode*)malloc(sizeof(struct ListNode));
int tmp = a + b + *sign;
if(tmp >= 10)
{
tmp -= 10;
*sign = 1;
} e
lse
*sign = 0;
s->val = tmp;
s->next = NULL;
//链接节点
p->next = s;
p = s;
} s
truct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
head->next = NULL;
//全局变量初始化
p = head;
int sign = 0;
while(l1!=NULL && l2!=NULL)
{
addItem(l1->val, l2->val, &sign);
l1 = l1->next;
l2 = l2->next;
} w
hile(l1 != NULL)
{
addItem(l1->val, 0, &sign);
l1 = l1->next;
} w
hile(l2 != NULL)
{
addItem(0, l2->val, &sign);
l2 = l2->next;
} if(
sign != 0)
addItem(0, 0, &sign);
struct ListNode *tmp = head;
head = head->next;
free(tmp);
return head;


相关文章
|
6月前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
49 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
6月前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
|
21天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
48 4
|
1月前
|
C语言
无头链表再封装方式实现 (C语言描述)
如何在C语言中实现无头链表的再封装,包括创建节点和链表、插入和删除操作、查找和打印链表以及销毁链表的函数。
27 0
|
21天前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
39 0
|
1月前
|
测试技术 C语言
单链表之无头链表(C语言版)
本文详细介绍了使用C语言实现无头单链表的方法,包括节点和链表结构的定义、链表的创建与销毁、节点的插入与删除,以及链表的打印等功能。文章通过具体的代码示例,展示了如何在无头链表中进行头插法、尾插法、自定义位置插入和删除,以及如何清空和销毁链表。
33 0
单链表之无头链表(C语言版)
|
1月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
25 0
|
4月前
|
存储 数据管理 C语言
C语言实战 | 使用链表完成“贪吃蛇”游戏
【7月更文挑战第1天】整体思维,即系统思维,强调以整体视角理解事物。在编程中,结构体体现这种思想,将相关变量打包处理。示例展示了如何用链表而非数组实现“贪吃蛇”游戏,链表提供了更灵活的动态数据管理。一系列代码图片详细描绘了链表结构体在游戏中的应用,包括节点定义、移动、碰撞检测等,凸显了使用链表的优势和代码的清晰组织。
45 0
C语言实战 | 使用链表完成“贪吃蛇”游戏
|
5月前
|
存储
数据结构——双向链表(C语言版)
数据结构——双向链表(C语言版)
31 2
|
5月前
|
算法 C语言
数据结构——单向链表(C语言版)
数据结构——单向链表(C语言版)
46 2