两个list关联合并_算法分享---两个有序链表的合并(C语言)
生活随笔
收集整理的這篇文章主要介紹了
两个list关联合并_算法分享---两个有序链表的合并(C语言)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 定義兩個(gè)指針,分別指向兩個(gè)鏈表的頭結(jié)點(diǎn),在兩個(gè)鏈表都不為空時(shí),
- 比較兩個(gè)鏈表結(jié)點(diǎn)的值的大小。
- 若鏈表l1的節(jié)點(diǎn)大于l2的節(jié)點(diǎn),則將l1的節(jié)點(diǎn)值賦值給l3。l1的指針指向下一個(gè)節(jié)點(diǎn)。
- 反之,則則將l2的節(jié)點(diǎn)值賦值給l3。l2的指針指向下一個(gè)節(jié)點(diǎn)。
- 兩個(gè)鏈表出現(xiàn)一個(gè)為空時(shí),判斷哪個(gè)不為空,將該鏈表剩下的節(jié)點(diǎn)全部賦值給l3。
圖解
代碼
#include <stdio.h> #include <malloc.h>//構(gòu)造結(jié)構(gòu)體 typedef struct list { int data; struct list *next; }*List,LNode;//函數(shù)聲明 List init_list(List head,int num); void print_list(List head); List merge(List l1,List l2);void main() { List l,l1,l2; l1 = (LNode*)malloc(sizeof(LNode)); l1 = init_list(l1,3); l2 = (LNode*)malloc(sizeof(LNode)); l2 = init_list(l2,7); l = merge(l1,l2); print_list(l);}//兩個(gè)有序鏈表合并函數(shù) /* List merge(List l1,List l2) { List head,p,s; head = (List)malloc(sizeof(LNode)); p = head; while(l1 != NULL && l2 != NULL) { s = (List)malloc(sizeof(LNode)); if(l1->data > l2->data) { s ->data = l2->data; l2 = l2->next; }else{ s ->data = l1->data; l1 = l1->next; } s->next = NULL; p->next = s; p = p->next; } while(l1 != NULL) { s = (List)malloc(sizeof(LNode)); s->data = l1->data; l1 = l1->next; s->next = NULL; p->next = s; p = p->next; } while(l2 != NULL) { s = (List)malloc(sizeof(LNode)); s->data = l2->data; l2 = l2->next; s->next = NULL; p->next = s; p = p->next; } return head->next; } *///兩個(gè)有序鏈表合并函數(shù)優(yōu)化 List merge(List l1,List l2) { List head,p,s; head = (List)malloc(sizeof(LNode)); p = head; while(l1 != NULL || l2 != NULL) { s = (List)malloc(sizeof(LNode)); if(l1 != NULL && l1->data <= l2->data) { s ->data = l1->data; l1 = l1->next; }else{ s ->data = l2->data; l2 = l2->next; } s->next = NULL; p->next = s; p = p->next; } return head->next; }//鏈表初始化函數(shù) List init_list(List head,int num) { int i = 1; List p = head; while(i <= num) { List s; s = (LNode*)malloc(sizeof(LNode)); s->data = i * num; s->next = NULL; p->next = s; p = p->next; i++; } return head->next; }//鏈表輸出函數(shù) void print_list(List head) { List p; p = head; while(p != NULL) { printf("%d ",p->data); p = p->next; } printf("n"); }總結(jié)
以上是生活随笔為你收集整理的两个list关联合并_算法分享---两个有序链表的合并(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 常用内置函数_python
- 下一篇: 基于朴素贝叶斯分类器的西瓜数据集 2.0