日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将两个有序链表合并为一个链表任然有序C语言

發布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将两个有序链表合并为一个链表任然有序C语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將兩個有序鏈表合并為一個鏈表任然有序,兩個鏈表都是從大到小或者從小到大。
方法:
1.將兩個鏈表連起來,對所有元素進行排序。
2.因為兩個鏈表的長度可能不同,則將兩鏈表相同長度的一部分進行排序,將較長鏈表的后邊直接連接在排好序的鏈表后邊

#include<stdio.h> #include<stdlib.h> typedef struct Node {int data;struct Node *next; }Node; Node* Hebing(Node* head1, Node* head2)? //合并兩個有序鏈表成一個有序鏈表 {if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head, *p1, *p2;if(head1->data < head2->data)?? //確定好合并后的頭結點 (從小到大) {head = head1;p1 = head1->next;p2 = head2;}else{head = head2;p1 = head1;p2 = head2->next;}?Node *move = head;?? //定義一個臨時指針,(不用創建新鏈表占用空間)將兩個鏈表連接在一起while(p1 && p2)????? //p1,p2都不為空 {if(p1->data <= p2->data){move->next = p1;move = p1;p1 = p1->next;}else{move->next = p2;move = p2;p2 = p2->next;}}if(p1)?? //p1比p2長,比較完最小長度的鏈表節點后,因為有序,剩下的直接加到比較完的后邊 move->next = p1;???? // 補齊p1剩余未比較的節點if(p2)move->next = p2;???? // 補齊p2剩余未比較的節點return head; } Node* Creat()????? //鏈表的創建 {Node *head,*p,*s;head =(struct Node *)malloc(sizeof(struct Node));int x,flag = 1;if(head == NULL)printf("頭結點創建失敗!\n");p = head;?? //p永遠指向head的尾部 printf("輸入(以0結束,從小到大):");while(flag){scanf("%d",&x);if(x != 0){s =(struct Node *)malloc(sizeof(struct Node));s->data = x;p->next = s;p = s;?}elseflag = 0;??}head = head->next;p->next = NULL;printf("鏈表建立成功!\n");?return head;? } void Print(Node *head) {Node *p = head;while(p!=NULL){printf("%d? ",p->data);p = p->next;}//printf("\n"); } int main() {Node *head1 = Creat();Node *head2 = Creat();Node *head3 = Hebing(head1, head2);Print(head3);return 0; }

總結

以上是生活随笔為你收集整理的将两个有序链表合并为一个链表任然有序C语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。