【数据结构】给出两个非空的链表用来表示两个非负的整数其中它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

https://leetcode-cn.com/problems/add-two-numbers/

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLTDataType;
typedef struct SListNode
{
	SLTDataType _data;
	struct SListNode* _next;
}SListNode;
typedef struct SList
{
	SListNode* _head;
}SList;
void SListInit(SList* plist)
{
	plist->_head = NULL;

}
void SListPushFront(SList* plist, SLTDataType x)
{
	//链表头压,得到指向链表头结点的指针;
	SListNode *cur = (SListNode *)malloc(sizeof(SListNode));//给链表结点(结构体)开辟空间
	cur->_data = x;//赋值
	cur->_next = plist->_head;//将这个结点的指针指向NULL
	plist->_head = cur;//将结点此时的地址复制个头指针,让它记住
	//所以先进入的会后移,和进栈一样,先进后出
}
void SListPrint(SList* plist)
{
	assert(plist);

	SListNode* cur;
	for (cur = plist->_head; cur; cur = cur->_next)
	{
		printf("%d->", cur->_data);
	}
	printf("NULL\n");
}
void SListreverse(SList* plist)
{

	SListNode* tmp = plist->_head->_next;
	SListNode* cur = plist->_head;
	while (tmp)
	{
		cur->_next = tmp->_next;
		tmp->_next = plist->_head;
		plist->_head = tmp;
		tmp = cur->_next;

	}
	 
}
int main()
{
	/*输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
		输出:7 -> 0 -> 8
		原因:342 + 465 = 807*/
	SList  plist;
	SListInit(&plist);
	SListPushFront(&plist, 3);
	SListPushFront(&plist, 4);
	SListPushFront(&plist, 2);
	SListreverse(&plist);
	SListPrint(&plist);
	 
	 
		 
	SList plist1;
	SListInit(&plist1);
	SListPushFront(&plist1, 4);
	SListPushFront(&plist1, 6);
	SListPushFront(&plist1, 5);
	SListreverse(&plist1);
	SListPrint(&plist1); 
	
	SListNode *tmp = (&plist)->_head;
	SListNode *tmp1 = (&plist1)->_head;
		
	int bai = (tmp->_data) * 100;
	int bai1 = (tmp1->_data) * 100;
	int shi = (tmp->_next->_data) * 10;
	int shi1 = (tmp1->_next->_data) * 10;
	int ge = (tmp->_next->_next->_data) * 1;
	int ge1 = (tmp1->_next->_next->_data) * 1;
	int shu = bai + shi + ge;
	int shu1 = bai1 + shi1 + ge1;
	//printf("%d  %d\n", shu, shu1);
	int add = shu + shu1;

	SList plist2;
	SListInit(&plist2);
	SListPushFront(&plist2, add/100);
	SListPushFront(&plist2, add/10%10);
	SListPushFront(&plist2, add%10);
	SListPrint(&plist2);

    system("pause");
    return 0;
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值