合并两个有序链表——题集(一)
来源:互联网 发布:nginx 视频点播服务器 编辑:程序博客网 时间:2024/05/21 10:04
合并两个有序链表——题集(一)
今天分享三道数据结构的题,分别是合并两个有序链表,合并以后的链表依旧有序;实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字;求两个整数之和,不得使用四则运算。
合并两个有序链表,合并以后的链表依旧有序:
代码如下:
#include<iostream>using namespace std; //--合并两个有序链表,合并以后的链表依旧有序。struct ListNode{ int val; ListNode* next; ListNode(int _val)
:val(_val) ,next(NULL) {}}; ListNode* Merge(ListNode* l1,ListNode* l2){//l1,l2为升序 if(l1 == NULL)return l2; if(l2 == NULL)return l1; ListNode* head; ListNode* tail; head=l1;//默认升序 if(l1->val > l2->val){ head = l2; l2 = l2->next; } else{ l1 = l1->next; } tail = head; while(l1 != NULL && l2 != NULL){ if(l1->val > l2->val){ tail->next = l2; l2 = l2->next; } else{ tail->next=l1; l1 = l1->next; } tail = tail->next; } if(l1 != NULL){ tail->next = l1; } else{ tail->next = l2; } return head;} void Printf(ListNode* l1){//打印 while(l1!=NULL){ cout<<l1->val<<" "; l1=l1->next; } printf("\n");}void Listtest(){ ListNode lA1(1); ListNode lA2(2); ListNode lA3(3); ListNode lA4(4); lA1.next = &lA2; lA2.next = &lA3; lA3.next = &lA4; ListNode lB1(1); ListNode lB2(4); ListNode lB3(6); ListNode lB4(8); ListNode lB5(11); lB1.next = &lB2; lB2.next = &lB3; lB3.next = &lB4; lB4.next = &lB5; cout<<"合并两个有序链表,合并以后的链表依旧有序。"<<endl; cout<<"lA(默认升序): "; Printf(&lA1); cout<<"lB(默认升序): "; Printf(&lB1); ListNode* tmp = Merge(&lA1, &lB1); cout<<"lAlB合并后: "; Printf(tmp); } int main(){ Listtest();//合并两个有序链表,合并以后的链表依旧有序。 system("pause"); return 0;}
运行结果
实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字:
利用递归:
原代码如下:
#include<iostream>using namespace std; //--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。int Summation(int n){ int sum=n; bool s = (n>0)&&(sum += Summation(n-1)); return sum;} int main(){ cout<<"1-5依次相加:"<<Summation(5)<<endl;////7.13////--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。 cout<<"1-100依次相加:"<<Summation(100)<<endl; cout<<"1-2155依次相加:"<<Summation(2155)<<endl; system("pause"); return 0;}
运行界面
求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号:
思路:使用位运算,可用&,|,^;异或:相同为0,相异为1(没有进位,各位相加的值);&:同1为1(进位)。
递归源代码:
#include<iostream>using namespace std; //求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号: int TwoSum(int a, int b){ if(a==0)return b; if(b==0)return a; int tmp = a^b; int carry = a&b; return TwoSum(tmp,carry); } int main(){ cout<<"8+12="<<TwoSum(8, 12)<<endl;//7.13//求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号 cout<<"63+127="<<TwoSum(63, 127)<<endl; cout<<"255+517="<<TwoSum(255, 517)<<endl; system("pause"); return 0;}
运行界面
分享如上!
PS:题集这一类,大多只有代码和运行结果,思路少有,视具体情况而定!
阅读全文
0 0
- 合并两个有序链表——题集(一)
- 有序的合并两个有序链表
- 两个有序链表合并为有序
- 经典算法——合并两个有序链表
- 经典算法学习——合并两个有序链表
- 链表——两个有序链表序列的合并
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 合并两个有序链表
- 两个有序链表合并
- 合并两个有序链表
- 两个有序链表合并
- 合并两个有序链表
- HTML5规范
- Python笔记(6)模块
- 国内 Android 个人与团队博客汇总
- 搜索算法调整背景下优化人员应如何应对
- 静态方法使用@Autowired注解报null问题
- 合并两个有序链表——题集(一)
- RocketMQ原理解析-consumer 1.启动
- 虚拟机NAT模式不能ping通物理机的解决方法
- 1065. 单身狗(25)
- 爱仕达多
- 触发器里面的一个小坑
- background-clip
- 阿里云服务器
- MD5加密