两个升序的单链表的头节点 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;