输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2017-06-28 17:09
357 查看
剑指offer:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:首先确定输出链表的头result为输入两个链表头中较小的一个。然后不断比较,把输入连个链表中头较小的依次插入输出链表尾部。所以需要一个结点指针end指向输出链表的尾结点。
//#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <math.h>
#include <iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* result,*end;//result为输出链表头,end为输出链表尾。
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
if(pHead1 != NULL && pHead2 != NULL)//确定输出头
if(pHead1->val <= pHead2->val){
result = pHead1;
pHead1 = pHead1->next;
}
else{
result = pHead2;
pHead2 = pHead2->next;
}
end = result;//此时头和尾相同
while(pHead1 != NULL && pHead2 != NULL){//不断比较插入尾部,直到一个输入链表为空
if(pHead1->val <= pHead2->val){
end->next = pHead1;//插入尾部
end = end->next;//更新尾部
pHead1 = pHead1->next;//跟新输入链表1的头
}
else{
end->next = pHead2;
end = end->next;
pHead2
4000
= pHead2->next;
}
}
思路:首先确定输出链表的头result为输入两个链表头中较小的一个。然后不断比较,把输入连个链表中头较小的依次插入输出链表尾部。所以需要一个结点指针end指向输出链表的尾结点。
//#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <math.h>
#include <iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* result,*end;//result为输出链表头,end为输出链表尾。
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
if(pHead1 != NULL && pHead2 != NULL)//确定输出头
if(pHead1->val <= pHead2->val){
result = pHead1;
pHead1 = pHead1->next;
}
else{
result = pHead2;
pHead2 = pHead2->next;
}
end = result;//此时头和尾相同
while(pHead1 != NULL && pHead2 != NULL){//不断比较插入尾部,直到一个输入链表为空
if(pHead1->val <= pHead2->val){
end->next = pHead1;//插入尾部
end = end->next;//更新尾部
pHead1 = pHead1->next;//跟新输入链表1的头
}
else{
end->next = pHead2;
end = end->next;
pHead2
4000
= pHead2->next;
}
}
if(pHead1 == NULL)//一个输入链表为空后,直接将另外一个插入输出的尾部,end 不用跟新了 end->next = pHead2; else end->next = pHead1; return result; } }; int main() { struct ListNode* p1 = (struct ListNode*)malloc(sizeof(struct ListNode)); //struct ListNode* p2 = (struct ListNode*)malloc(sizeof(struct ListNode)); ListNode* p2 = new ListNode(1); struct ListNode* r = (struct ListNode*)malloc(sizeof(struct ListNode)); p1->val = 0; p1->next = NULL; for(int i = 6; i >= 2; i -= 2){ struct ListNode* t = (struct ListNode*)malloc(sizeof(struct ListNode)); t->val = i; t->next = p1->next; p1->next = t; } for(int i = 7; i > 1; i -= 2){ struct ListNode* t = (struct ListNode*)malloc(sizeof(struct ListNode)); t->val = i; t->next = p2->next; p2->next = t; } Solution s; r = s.Merge(p1,p2); while(r != NULL){ cout << r->val << endl; r = r->next; } system("pause"); return 0; }
相关文章推荐
- java实现输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。C++
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- java 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 华为机试样题解析:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。 编写程序,任意输入两个站点名称,输出最少需要经过的站点数
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 4.输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“
- ACM822 计算机画图也挺有趣的哈!那我们就来用计算机画幅图吧。。。 输入 输入一个正整数N(0<N<=10),表示要输出的正方形的边上*的个数 输出 输出一个满足题意的正方形