1.创建链表
#include<bits/stdc++.h>
using namespace std;
/*
typedef struct ListNode{
int val;
ListNode* next;
ListNode() : val(0), next(NULL) {}
ListNode(int x) : val(x), next(NULL) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
}TreeNode;*/
class ListNode{
public:
int val;
ListNode* next;
ListNode() : val(0), next(NULL) {}
ListNode(int x) : val(x), next(NULL) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
int main()
{
ListNode* head = new ListNode(0);
ListNode* tmp = head;
for( int i=1; i<10; i++){
ListNode* node = new ListNode(i);
//node->next = NULL;
tmp->next = node;
tmp = node;
}
while( head != NULL ){
cout<<head->val<<endl;
head = head->next;
}
return 0;
}
2.合并两个有序链表
/*合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
*/
#include<bits/stdc++.h>
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode(int x):val(x),next(NULL){}
ListNode(int x,ListNode* next):val(x),next(next){}
};
ListNode* mergelists(ListNode* l1,ListNode* l2){
if(l1 == NULL){
return l2;
}
if(l2 == NULL){
return l1;
}
ListNode* dummyNode = new ListNode(-1);
ListNode* cur = dummyNode;
while(l1 != NULL && l2 != NULL){
if(l1->val < l2->val){
cur->next = l1;
l1 = l1->next;
cur = cur->next;
}
else{
cur->next = l2;
l2 = l2->next;
cur = cur->next;
}
}
if( l1 != NULL){
cur->next = l1;
}
if( l2 != NULL){
cur->next = l2;
}
return dummyNode->next;
}
int main()
{
//输入:1->2->4, 1->3->4
//输出:1->1->2->3->4->4
ListNode* l1 = new ListNode(1);
ListNode* l1n = new ListNode(2);
ListNode* l1nn = new ListNode(4);
l1->next = l1n;
l1n->next = l1nn;
l1nn->next = NULL;
ListNode* l2 = new ListNode(1);
ListNode* l2n = new ListNode(3);
ListNode* l2nn = new ListNode(4);
l2->next = l2n;
l2n->next = l2nn;
l2nn->next = NULL;
//cout<<l1->next->val;
ListNode* res = mergelists(l1,l2);
while( res!=NULL ){
cout<<res->val<<" ";
res = res->next;
}
return 0;
}