两个升序的单链表的头节点 head1 和 head2
在给定的函数内返回新链表的头指针。
5 1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 7 8 9 10 11 12
保证链表的长度不大于1000000
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; this.next = null; } } public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine().trim()); String[] list1 = br.readLine().trim().split(" "); int m = Integer.parseInt(br.readLine().trim()); String[] list2 = br.readLine().trim().split(" "); ListNode head1 = new ListNode(Integer.parseInt(list1[0])); ListNode head2 = new ListNode(Integer.parseInt(list2[0])); ListNode cur1 = head1, cur2 = head2; for(int i = 1; i < n; i++){ cur1.next = new ListNode(Integer.parseInt(list1[i])); cur1 = cur1.next; } for(int i = 1; i < m; i++){ cur2.next = new ListNode(Integer.parseInt(list2[i])); cur2 = cur2.next; } ListNode list = mergeLinkedList(head1, head2); while(list != null){ System.out.print(list.val + " "); list = list.next; } } private static ListNode mergeLinkedList(ListNode head1, ListNode head2) { ListNode dummy = new ListNode(-1); ListNode cur = dummy; while(head1 != null && head2 != null){ if(head1.val < head2.val){ cur.next = head1; head1 = head1.next; }else{ cur.next = head2; head2 = head2.next; } cur = cur.next; } cur.next = head1 == null? head2: head1; return dummy.next; } }
list_node * merge_list(list_node * head1, list_node * head2) { list_node *head = new list_node(), *p = head; while (head1 != nullptr && head2 != nullptr) { if (head1->val < head2->val) { p = p->next = head1; head1 = head1->next; } else { p = p->next = head2; head2 = head2->next; } } if (head1 != nullptr) p->next = head1; if (head2 != nullptr) p->next = head2; return head->next; }
list_node * merge_list(list_node * head1, list_node * head2) { list_node * head = new list_node(); list_node *p = head; while(head1 && head2){ if(head1->val < head2->val){ p->next = head1; head1 = head1->next; }else{ p->next = head2; head2 = head2->next; } p = p->next; } while(head1){ p->next = head1; p = p->next; head1 = head1->next; } while(head2){ p->next = head2; p = p->next; head2 = head2->next; } return head->next; }
# include <bits/stdc++.h> using namespace std; struct list_node{ int val; struct list_node * next; }; list_node * input_list(void) { int n, val; list_node * phead = new list_node(); list_node * cur_pnode = phead; scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &val); if (i == 1) { cur_pnode->val = val; cur_pnode->next = NULL; } else { list_node * new_pnode = new list_node(); new_pnode->val = val; new_pnode->next = NULL; cur_pnode->next = new_pnode; cur_pnode = new_pnode; } } return phead; } list_node * merge_list(list_node * head1, list_node * head2) { //////在下面完成代码 list_node *head = new list_node(); list_node *cur = head; bool flag = true; while (head1 != NULL || head2 != NULL) { if (head2 == NULL || (head1 != NULL && head1->val < head2->val)) { list_node *tmp = new list_node(); tmp->val = head1->val; tmp->next = NULL; cur->next = tmp; cur = tmp; head1 = head1->next; } else { list_node *tmp = new list_node(); tmp->val = head2->val; tmp->next = NULL; cur->next = tmp; cur = tmp; head2 = head2->next; } } return head->next; } void print_list(list_node * head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } puts(""); } int main () { list_node * head1 = input_list(); list_node * head2 = input_list(); list_node * new_head = merge_list(head1, head2); print_list(new_head); return 0; }
list_node * merge_list(list_node * head1, list_node * head2) { list_node *head = nullptr; list_node **ptail = &head; while(head1 && head2){ if(head1->val < head2->val){ *ptail = head1; head1 = head1->next; }else{ *ptail = head2; head2 = head2->next; } ptail = &((*ptail)->next); *ptail = nullptr; } *ptail = head1 ? head1 : head2; return head; }
#include<stdio.h> #include<stdlib.h> typedef struct LNode{ int data; struct LNode* next; }LNode,*LinkList; LinkList Init(); void GetNum(LinkList H,int n); void Add(LinkList p1,LinkList p2); int main(){ LinkList p1,p2; int m,n; p1 = Init(); p2 = Init(); scanf("%d",&m); GetNum(p1,m); scanf("%d",&n); GetNum(p2,n); Add(p1,p2); p2 = p2->next; while(p2){ printf("%d ",p2->data); p2 = p2->next; } } LinkList Init() { LinkList H = (LinkList)malloc(sizeof(LNode)); H->next = NULL; return H; } void GetNum(LinkList H,int n){ LinkList p,q=H; int x; for(int i = 0; i < n; i++){ scanf("%d",&x); p = (LinkList)malloc(sizeof(LNode)); p->next = NULL; p->data = x; q->next = p; q = p; } } void Add(LinkList p1,LinkList p2){ LinkList p = p2->next,q = p1->next,s=p2; while(p&&q){ if (p->data <= q->data){ s->next = p; s = p; p = p->next; }else{ s->next = q; s = q; q = q->next; } } s->next = p ? p : q; }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static class Node { public int value; public Node next; public Node(int value) { this.value = value; } } public static Node listGenerator(int length, String[] numbers) { Node head = new Node(Integer.parseInt(numbers[0])); Node cur = head; for (int i = 1; i < length; i++) { cur.next = new Node(Integer.parseInt(numbers[i])); cur = cur.next; } cur.next = null; return head; } public static void printList(Node head) { while (head != null) { System.out.print(head.value +" "); head = head.next; } System.out.println(); } public static Node merge(Node head1, Node head2) { if (head1 == null) { return head2; } if (head2 == null) { return head1; } Node head = new Node(-1); Node cur = head; while (head1 != null && head2 != null) { if (head1.value > head2.value) { cur.next = head2; head2 = head2.next; } else { cur.next = head1; head1 = head1.next; } cur = cur.next; } cur.next = head1 != null ? head1 : head2; return head.next; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int num1 = Integer.parseInt(bufferedReader.readLine()); String[] number1 = bufferedReader.readLine().split(" "); int num2 = Integer.parseInt(bufferedReader.readLine()); String[] number2 = bufferedReader.readLine().split(" "); Node head1 = listGenerator(num1, number1); Node head2 = listGenerator(num2, number2); Node head = merge(head1, head2); printList(head); } }
struct valueCompare{//自定义比较函数 bool operator()(const list_node* a,const list_node* b){ return a->val>b->val; } }; list_node * merge_list(list_node * head1, list_node * head2) { list_node *resultHead=nullptr,*resultTail=nullptr; priority_queue<list_node*,vector<list_node*>,valueCompare> minHeap;//建立小顶堆 minHeap.push(head1); minHeap.push(head2); while(!minHeap.empty()){ auto node=minHeap.top(); minHeap.pop(); if(resultHead==NULL){//第一次循环 resultHead=resultTail=node; } else{ resultTail->next=node; resultTail=resultTail->next; } if(node->next){ minHeap.push(node->next); } } return resultHead; }
if(head1==NULL){ return head2; } if(head2==NULL){ return head1; } list_node *h = NULL; list_node *t = NULL; list_node *p = head1; list_node *q = head2; if(p->val<q->val){ h = p; t = p; p = p->next; }else{ h = q; t = q; q = q->next; } while(p!=NULL&&q!=NULL){ if(p->val < q->val){ t->next = p; t = p; p = p->next; }else{ t->next = q; t = q; q = q->next; } } if(q == NULL){ t->next = p; }else{ t->next = q; } return h;