将两个无序链表合成一个链表

对于链表,可以先将两个链表排序,然后再将其枚举合成一个链表。

或者是先将一个链表接到另一个链表的尾部,然后将总链表排序。

 1 #include <bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <malloc.h>
 6 using namespace std;
 7 struct Node{
 8     int date;
 9     struct Node *next;
10 };
11 void Sort(struct Node *head,int count){
12     struct Node *p;
13     p=(struct Node *)malloc(sizeof(struct Node *));
14     int temp;
15     for(int i=0;i<count-1;i++){
16         for(p=head->next;p->next!=NULL;p=p->next){
17             if(p->date>p->next->date){
18                 temp=p->date;
19                 p->date=p->next->date;
20                 p->next->date=temp;
21             }
22         }
23     }
24 }
25
26 void bond(struct Node *head1,struct Node *head2){
27     struct Node *p;
28     p=head1;
29     while(p->next!=NULL){
30         p=p->next;
31     }
32     p->next=head2->next;
33 }
34
35 void insert(struct Node *head,int count){
36     struct Node *p;
37     while(count--){
38         p=(struct Node *)malloc(sizeof(struct Node *));
39         scanf("%d",&p->date);
40         p->next=head->next;
41         head->next=p;
42     }
43 }
44
45 void out(struct Node *head){
46     struct Node *p;
47     p=(struct Node *)malloc(sizeof(struct Node *));
48     p=head;
49     while(p->next!=NULL){
50         printf("%d ",p->next->date);
51         p=p->next;
52     }
53     printf("\n");
54 }
55 int main(){
56     struct Node *head1,*head2;
57     int n,m;
58     head1=(struct Node *)malloc(sizeof(struct Node *));
59     head2=(struct Node *)malloc(sizeof(struct Node *));
60     scanf("%d%d",&n,&m);
61     head1->next=NULL;
62     head2->next=NULL;
63     insert(head1,n);
64     insert(head2,m);
65     bond(head1,head2);
66     Sort(head1,n+m);
67     out(head1);
68     return 0;
69 }

时间: 2024-10-17 19:23:17

将两个无序链表合成一个链表的相关文章

线性时间将两个有序链表合成一个有序链表(constant additional space)

description: given two sorted singly list, merge them into one using constant additional space algorithm: we will reference the two linked list as list1 and list2 for convenience, since list1 is sorted,just find the right position for each element in

两个有序链表合成一个有序链表

RT.... 无聊帮朋友撸个 C++ 作业.. = = 1 /* 2 无聊帮朋友撸个作业...... \ = v = / 3 4 两个有序链表合成为一个有序链表. 5 要求: 6 1. 每个链表元素里的值不超过int范围. 7 2. 两个链表要求为升序(从小到大). 8 9 10 2016.1.5 author : 加德满都的猫会爬树 11 12 */ 13 14 #include <iostream> 15 using namespace std; 16 const int MAX = 10

链表--判断一个链表是否为回文结构

给定一个链表的头节点head, 请判断该链表是否为回文结构. 例如: 1->2->1, 返回true. 1->2->2->1, 返回true.15->6->15, 返回true. 1->2->3, 返回false.进阶: 如果链表长度为N, 时间复杂度达到O(N), 额外空间复杂度达到O(1). 原文地址:https://www.cnblogs.com/SkyeAngel/p/8747901.html

【LeetCode】两个有序数组合成一个有序数组(NEW)

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n.你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素.示例: 输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6] 解法1: 之前如果不考虑合并,空间上新增一个数组

反转链表-输入一个链表,反转链表后,输出链表的所有元素。

1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* pHead) { 12 ListNode* res=NULL; 13 ListNode* pre=NULL; 14 if(pHead==NU

将两个有序链表和为另外一个链表,并保证有序

直接递归 代码: #include <iostream> #include <stack> using namespace std; typedef struct listNode{ int key; struct listNode *pNext; } * pNode,Node; void createNode(pNode &pHead){ bool isFirst=true; int temp; scanf("%d",&temp); pNode

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

新增一个链表,然后分别采用2个指针指向这两个链表,每次比较链表的值,将较小的那一个存入新链表中.需要主要的是对空链表进行处理,主要还是考察代码的鲁棒性.总共2个链表,数组分别是1,3,5,7,和2, 4, 6,8 采用java进行实现. package com.test.algorithm; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Me

27、输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路:同归并算法 本题: 1 public class Solution { 2 public ListNode Merge(ListNode list1, ListNode list2) { 3 ListNode head; 4 if (list1 == null) { 5 return list2; 6 } 7 if (list2 == null) { 8 return list1; 9 } 10

反转一个链表的两种方法:递归和循环

下面是反转一个链表的两种方法: 一.循环算法 //反转一个链表,循环算法 LinkList Reverse(LinkList& head) { // if(!head) // return head; //此时不用判断head是否为空,如是空的话返回的也是空 LinkList cur = head; LinkList hou; LinkList beh = 0; while (cur) { hou = cur->next; cur->next = beh; beh = cur; cur