合并两个有序的链表
2013-09-27 19:37
267 查看
记得以前写过一个合并两个有序数组的问题,也就是相互比较并放入合适的位置,今天的这个算法和数组的问题其实是一样的,这里不多做介绍了,直接贴出代码:
链表的定义:
首先给出非递归版本的:
合并代码:
递归版本的代码:
打印链表节点:
链表的定义:
typedef struct _Node { int data; struct _Node *next; }Node, *List;
首先给出非递归版本的:
合并代码:
List merge_two_list(List list1, List list2) { List new_list = NULL; Node *temp = NULL; if (list1 == NULL) return list2; if (list2 == NULL) return list1; if (list1 -> data <= list2 -> data) { new_list = list1; list1 = list1 -> next; } else { new_list = list2; list2 = list2 -> next; } temp = new_list; while (list1 != NULL && list2 != NULL) { if (list1 -> data <= list2 -> data) { temp -> next = list1; temp = list1; list1 = list1 -> next; } else { temp -> next = list2; temp = list2; list2 = list2 -> next; } } if (list1 != NULL) temp -> next = list1; if (list2 != NULL) temp -> next = list2; return new_list; }
递归版本的代码:
List merge_two_list_2(List list1, List list2) { List new_list = NULL; if (list1 == NULL) return list2; if (list2 == NULL) return list1; if (list1 -> data <= list2 -> data) { new_list = list1; new_list -> next = merge_two_list_2(list1 -> next, list2); } else { new_list = list2; new_list -> next = merge_two_list_2(list1, list2 -> next); } return new_list; }
打印链表节点:
void print(List list_head) { Node *temp = NULL; if (list_head == NULL) return; temp = list_head; while (temp != NULL) { printf("%d ", temp -> data); temp = temp -> next; } }
相关文章推荐
- c++ 将两个有序的单链表AB合并到新的单链表C中
- 数据结构_中国大学MOOC(慕课)——两个有序链表序列的合并问题
- 合并两个有序链表
- LeetCode Merge Two Sorted Lists(合并两个有序链表)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 7-2 两个有序链表序列的合并
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
- 【面试题17】将两个有序的链表合并
- 两个有序链表合并
- 笔试题四:带头节点head两个链表合并,并且有序
- 合并两个有序的链表为有序链表
- 两个有序链表序列的合并
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 合并两个有序链表的递归与非递归
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,要求用递归方法进行。
- 将两个有序链表合并成一个有序链表
- 两个链表有序 合并成一个链表
- 两个有序链表合并递归实现及非递归实现
- 合并两个有序链表,合并以后的链表依旧有序
- 两个有序单向链表的合并