C++合并两个有序的单链表
来源:互联网 发布:刷贴软件 编辑:程序博客网 时间:2024/06/05 23:40
一直看到的都是合并的函数,却没有看到完整的输入输出啥样的,今天自己写一个,包含链表的初始化
// 合并两个有序链表.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <iostream>using namespace std;struct ListNode{int val;ListNode* next;};ListNode* initList1(ListNode* head){//初始化第一个链表ListNode* node1 = new ListNode();node1->val = 2;head->next = node1;ListNode* node2 = new ListNode();node2->val = 3;node1->next = node2;ListNode* node3 = new ListNode();node3->val = 6;node2->next = node3;ListNode* node4 = new ListNode();node4->val = 8;node3->next = node4;return head;}//initList1ListNode* initList2(ListNode* head){//初始化第二个链表ListNode* node1 = new ListNode();node1->val = 1;head->next = node1;ListNode* node2 = new ListNode();node2->val = 2;node1->next = node2;ListNode* node3 = new ListNode();node3->val = 4;node2->next = node3;ListNode* node4 = new ListNode();node4->val = 5;node3->next = node4;return head;}//initList2//从头至尾遍历单链表void visitList(ListNode* head){while(head!= NULL){cout<<head->val<<endl;head= head->next;}}//visitList//合并连个有序链表ListNode* mergerTwoSortedList(ListNode* head1,ListNode* head2){ListNode* head = new ListNode();//head指针是每次后移的ListNode* firstNode = head;//需要确定好一个不变的头结点,然后返回这个头结点的next地址,才能返回完成的链表while(head1!=NULL && head2!=NULL){if(head1->val > head2->val){head->next = head2;//这里只是确定好head->next是哪个结点,head还没有指向这个结点head2 = head2->next;}else{head->next = head1; head1 = head1->next;}head = head ->next;//head指向这个结点}//whilehead->next = head1?head1:head2;//遇到一个为空后,哪个不为空就next指向哪一个//return head->next;//输出是:7 8 ,因为head指针也在往后移动return firstNode->next;}//mergerTwoSortedListint _tmain(int argc, _TCHAR* argv[]) { //函数中初始化 cout<<"第一个链表:"<<endl; ListNode* head1 = new ListNode(); head1->val = 0; head1 = initList1(head1); visitList(head1); cout<<"第二个链表:"<<endl; ListNode* head2 = new ListNode(); head2->val = -1; head2 = initList2(head2); visitList(head2); cout<<"合并后的新链表:"<<endl; ListNode* head = mergerTwoSortedList(head1,head2); visitList(head); return 0; } //第一个链表://0//2//3//6//8//第二个链表://-1//1//2//4//5//合并后的新链表://-1//0//1//2//2//3//4//5//6//8//请按任意键继续. . .
单步调试发现:
firstNode指针保存的值并没有改变,是刚开始时head的地址,
head每次在后移,地址是改变的,所以最后是return firstNode->next,才能返回完整链表
阅读全文
0 0
- 【C语言】两个有序单链表的合并
- 两个有序单链表的合并&两个有序数组的合并
- 两个有序单链表的合并
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 数据结构 链表 合并两个有序的单链表 C语言版
- 合并两个有序单链表
- 合并两个有序单链表
- 合并两个有序单链表
- 两个有序单链表合并
- 合并两个有序单链表
- 合并两个有序单链表
- Java NIO系列教程(五) 通道之间的数据传输
- 随笔
- HDU 6178 Monkeys【dfs】【输入外挂模板】
- Java验证码的编写
- Ionic3取消滚动条 --记录
- C++合并两个有序的单链表
- 常用简单算法
- UVA
- echarts 修改legend样式(矩形、圆、默认等)
- Linux环境下后台一直运行程序不退出的方法
- 程序精简第一步之百鸡问题(减少循环提高运行速度)
- max_element和min_element的用法
- RoundTrip (Tarjan)
- 清华大学2003年机试-查找学生信息-1069