C++两个单链表相加生成一个单链表进阶解法 空间复杂度O(1)
来源:互联网 发布:php编写网站头部底部 编辑:程序博客网 时间:2024/06/12 22:57
#include <iostream>
struct Node {
int value;
Node *next;
Node(int data) : value(data), next(nullptr) {};
};
Node *reverse(Node * head);
Node *addTwoList(Node * head1, Node *head2);
void print(Node *head);
int main()
{
Node n1(9);
Node n2(3);
Node n3(8);
n1.next = &n2;
n2.next = &n3;
Node b1(6);
Node b2(3);
b1.next = &b2;
//print(reverse(&n1));// 测试链表翻转函数以及print函数
print(addTwoList(&n1, &b1));
system("pause");
return 0;
}
Node * reverse(Node * head) {
if (head == nullptr) {
return head;
}
Node * pre = nullptr;
Node * next = nullptr;
while (head != nullptr) {
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
void print(Node * head)
{
while (head != nullptr) {
std::cout << head->value << std::endl;
head = head->next;
}
}
Node *addTwoList(Node * head1, Node *head2)
{
head1 = reverse(head1);
head2 = reverse(head2);
int add = 0, n1 = 0, n2 = 0;
Node * cur1 = head1, *cur2 = head2, *n = nullptr;
while (cur1 != nullptr || cur2 != nullptr) {
n1 = cur1 == nullptr ? 0 : cur1->value;
n2 = cur2 == nullptr ? 0 : cur2->value;
if (cur1!= nullptr)
cur1 = cur1->next;
if (cur2 != nullptr)
cur2 = cur2->next;
Node * node = new Node((n1 + n2 + add) % 10);
if (n1 + n2 + add >= 10)
add = 1;
else
add = 0;
node->next = n;
n = node;
}
if (add == 1) {
Node * node = new Node(1);
node->next = n;
n = node;
}
reverse(head1);
reverse(head2);
return n;
}
struct Node {
int value;
Node *next;
Node(int data) : value(data), next(nullptr) {};
};
Node *reverse(Node * head);
Node *addTwoList(Node * head1, Node *head2);
void print(Node *head);
int main()
{
Node n1(9);
Node n2(3);
Node n3(8);
n1.next = &n2;
n2.next = &n3;
Node b1(6);
Node b2(3);
b1.next = &b2;
//print(reverse(&n1));// 测试链表翻转函数以及print函数
print(addTwoList(&n1, &b1));
system("pause");
return 0;
}
Node * reverse(Node * head) {
if (head == nullptr) {
return head;
}
Node * pre = nullptr;
Node * next = nullptr;
while (head != nullptr) {
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
void print(Node * head)
{
while (head != nullptr) {
std::cout << head->value << std::endl;
head = head->next;
}
}
Node *addTwoList(Node * head1, Node *head2)
{
head1 = reverse(head1);
head2 = reverse(head2);
int add = 0, n1 = 0, n2 = 0;
Node * cur1 = head1, *cur2 = head2, *n = nullptr;
while (cur1 != nullptr || cur2 != nullptr) {
n1 = cur1 == nullptr ? 0 : cur1->value;
n2 = cur2 == nullptr ? 0 : cur2->value;
if (cur1!= nullptr)
cur1 = cur1->next;
if (cur2 != nullptr)
cur2 = cur2->next;
Node * node = new Node((n1 + n2 + add) % 10);
if (n1 + n2 + add >= 10)
add = 1;
else
add = 0;
node->next = n;
n = node;
}
if (add == 1) {
Node * node = new Node(1);
node->next = n;
n = node;
}
reverse(head1);
reverse(head2);
return n;
}
阅读全文
0 0
- C++两个单链表相加生成一个单链表进阶解法 空间复杂度O(1)
- 单链表反转,要求空间复杂度O(1)
- 数字螺旋输出,O(1)空间复杂度解法
- 青蛙跳台阶解法 时间复杂度O(n) 空间复杂度O(1)
- 字符串移动k位的时间复杂度o(n)空间复杂度o(1)的解法
- 单链表的归并排序:时间复杂度O(nlogn),空间复杂度O(1)
- 空间复杂度O(1)的两个有序序列的归并
- 如何快速找出一个数组中只出现一次的两个数,其他元素出现两次?保证时间复杂度O(n),空间复杂度O(1)
- 数组中只出现一次的数字,时间复杂度O(n),空间复杂度O(1)的解法
- Sort Colors [leetcode] 扫描数组一遍,O(1)空间复杂度的解法
- Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
- 给定一个无序单链表头节点head,实现单链表的选择排序,要求:额外空间复杂度为O(1)
- 将m,n(m>n)的连续自然数序列,打乱顺序重新排列,随机取出一个数,试问取出的这个数是多少?使用一种解法,时间复杂度O(m-n),空间复杂度O(1)
- 算法:两个单链表生成相加链表
- 两个单链表生成相加链表
- 两个单链表生成相加链表
- 两个单链表生成相加链表II
- 两个单链表生成相加链表
- 数组
- emq开发过程中用到的linux命令
- 从笑话看软测
- 简单记录 数据结构(1)
- 高斯消元
- C++两个单链表相加生成一个单链表进阶解法 空间复杂度O(1)
- 数据结构-图
- session实现原理
- python字符串split(),join(),strip()函数及网易笔试 回文序列
- python读取excel表,获取空单元格,报错还是获取到空字符串?
- mysql update使用子查询
- 李开复:我家的AI是坠吼的
- Spring Data JPA 介绍和使用
- ios开发之访问权限