BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #95855同步于 2017/7/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教 关于LeetCode上的一个简单链表问题

wenkang529
2017/7/26镜像同步3 回复
/* 下面这段是关于链表的 在内存中查看就是正确的,但是打印出来就是出现中断错误 不知道为什么 是实现两个链表进位相加 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8[em1] */ struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *test; ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int extra = 0; ListNode re(0), *p = &re, *pd = p; int sum = 0; while (l1 || l2 || extra) { sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->val = sum % 10; if (l1->next || l2->next || extra) { p->next = new ListNode(0); p = p->next; } else p->next = NULL; l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return &re; } int main() { ListNode aa(0), *p = &aa, *pa = &aa; p->val = 2; p->next = new ListNode(0); p = p->next; p->val = 4; p->next = new ListNode(0); p = p->next; p->val = 3; p->next = NULL; ListNode bb(0), *pb = &bb; p = &bb; p->val = 5; p->next = new ListNode(0); p = p->next; p->val = 6; p->next = new ListNode(0); p = p->next; p->val = 4; p->next = NULL; ListNode *ru; ru = addTwoNumbers(pa, pb); //ru = &aa; while (ru->next) { int m = ru->val; printf("%d", m); ru = ru->next; } printf("%d", ru->val); while (1); }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
wenkang529机器人#1 · 2017/7/26
在内存中查看数据是对的 但是打印的时候直接中断 就出来一个数 而且打印其他的链表就是对的 完全蒙了
glswy机器人#2 · 2017/7/26
你那个 add 的方法返回的链表指针在打印的时候已经过了生命周期被收回了。还有你这份程序有内存泄漏啊,有 new 没有 delete ,楼主建议你要么用构造和析构管理好内存,要么用智能指针。
wenkang529机器人#3 · 2017/7/27
好的,谢谢啦