两个单链表的合并(C语言实现)
2017-11-26 17:56
344 查看
单链表的合并还是挺简单的,直接上代码吧。
#include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List; List Read(); /* 链表读取 */ void Print( List L ); /*链表输出;空链表将输出NULL */ List Merge( List L1, List L2 ); /*链表合并*/ int main() { List L1, L2, L; L1 = Read(); //读取链表1 L2 = Read(); //读取链表2 L = Merge(L1, L2); Print(L); Print(L1); Print(L2); return 0; } List Merge( List L1, List L2 ) { List L, p1, p2, r ; p1 = L1->Next; p2 = L2->Next; L = (List)malloc(sizeof(struct Node)); L->Next = NULL; r = L; while (p1 && p2){ if(p1->Data < p2->Data){ r->Next = p1; r = p1; p1 = p1->Next; } else{ r->Next = p2; r = p2; p2 = p2->Next; } } if(p1) r->Next = p1; else r->Next = p2; L1->Next = NULL; L2->Next = NULL; return L; } List Read() { int n, i; List L, p, s; scanf("%d",&n); L = (List)malloc(sizeof(struct Node)); L->Next = NULL; p = L; for(i = 0;i < n; ++i){ s = (List)malloc(sizeof(struct Node)); scanf("%d",&s->Data); s->Next = p->Next; p->Next = s; p = s; } return L; } void Print(List L) { List p; p = L->Next; if (L->Next==NULL) { printf("NULL"); } while(p) { printf("%d ", p->Data); p = p->Next; } printf("\n"); }
相关文章推荐
- 单链表操作之合并两个有序单链表---递归 and 非递归实现
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 两个有序单链表合并成一个有序单链表的java实现
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- C语言实现合并两个有序(从小到大)顺序表为一个顺序表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- C语言实现链表的创建、计算链表长度及两个链表的合并
- java编程实现将两个有序单链表LA,LB合并成新的LA
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- 编程实现合并两个有序单链表
- C语言实现:合并两个有序的数组,合并后的数组依然有序
- 两个有序单链表合并成一个有序单链表的java实现
- 编程实现两个有序单链表的合并
- 编程实现合并两个有序单链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 【C语言】两个有序单链表的合并
- 实现两个有序单链表的合并。要求:随机创建两个单链表,实现单链表的排序,再对两个有序单链表进行合并。
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)