/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <cstdlib>
#include <iostream>
using namespace std;
struct ListNode{
int data;
ListNode *next;
};
class Solution {
public:
ListNode* merge(ListNode*l1,ListNode*l2){
if (NULL == l1) return l2;
if (NULL == l2) return l1;
ListNode *ret = NULL;
if(l1->data < l2->data)
{
ret = l1;
ret->next = merge(l1->next,l2);
}else
{
ret = l2;
ret->next = merge(l2->next,l1);
}
return ret;
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
struct ListNode *p,*q,*r,*head;
p = l1->next;
q = l2->next;
head = (ListNode*)malloc(sizeof(ListNode));
head ->next = NULL;
head = l1;
delete(l2);
r = head;
while(p!=NULL&&q!=NULL){
if(p->data<q->data){
r->next = p;
p = p->next;
r = r->next;
}else{
r->next = q;
q = q->next;
r = r->next;
}
}
if(p != NULL){
r ->next = p;
}
if(q != NULL){
r ->next = q;
}
return head;
}
void createList(ListNode * &node ,int data[],int length){
ListNode * p;//指向最后一个接点
ListNode * q;//指向新创建的接点
//创建头结点
node=new ListNode;
node->next=NULL;
p=node;
int i;
for(i=1;i<=length;i++){
q=new ListNode;
q->data=data[i];
p->next=q;
p=q;
}
p->next=NULL;
}
//遍历单链表
void showList(ListNode * node){
ListNode * p;//指向当前遍历的接点
if(node!=NULL)
p=node->next;
while(p!=NULL){
printf("%d-->",p->data);
p=p->next;
}
}
};
int main(int argc, char *argv[])
{
Solution L1,L2,L3;
ListNode * node=NULL;
ListNode * node2=NULL;
ListNode * node3=NULL;
int data[11];
int data2[11];
int i;
for(i=1;i<=3;i++){
data[i]=i*i ;
}
for(i=1;i<=3;i++){
data2[i]=i ;
}
int length=3;
L1.createList(node ,data,length);
L2.createList(node2 ,data2,length);
L1.showList(node);
printf("\n");
L2.showList(node2);
printf("\n");
node3 = L3.mergeTwoLists(node,node2);
L3.showList(node3);
system("PAUSE");
return EXIT_SUCCESS;
}
链表的创建,合并
最新推荐文章于 2024-07-20 11:22:21 发布