剑指offer—第三章高质量代码(合并两个排序链表)
2015-06-15 15:23
357 查看
题目:输入员两个递增排序的链表,合并这两个链表并使新的链表中的结点仍然是按照递增排序的。
思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1->mValue比Head2->mValue小,那么头节点,就是Head1,递归实现后面的节点的排序。
C++代码:
Java代码:
思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1->mValue比Head2->mValue小,那么头节点,就是Head1,递归实现后面的节点的排序。
C++代码:
#include<iostream> using namespace std; struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* CreateList(int a[],int b) { ListNode* pHead=NULL,*pNode=NULL; for(int i=0;i<b;i++) { ListNode* pNew=new ListNode(); pNew->m_nValue=a[i]; pNew->m_pNext=NULL; if(pHead==NULL) { pHead=pNew; pNode=pNew; } else { pNode->m_pNext=pNew; pNode=pNode->m_pNext; } } return pHead; } void PrintList(ListNode* pHead) { if(pHead==NULL) { return; } ListNode* pNode=pHead; while(pNode!=NULL) { cout<<pNode->m_nValue<<" "; pNode=pNode->m_pNext; } cout<<endl; } ListNode* MergeLink(ListNode* Head1,ListNode* Head2) { ListNode* MergeHead=NULL; if(Head1==NULL) return Head2; if(Head2==NULL) return Head1; if(Head1==NULL&&Head2==NULL) return NULL; if(Head1->m_nValue>Head2->m_nValue) { MergeHead=Head2; Head2->m_pNext=MergeLink(Head2->m_pNext,Head1); } else { MergeHead=Head1; Head1->m_pNext=MergeLink(Head1->m_pNext,Head2); } return MergeHead; } void main() { int a[]={3,4,5,6,8}; int b[]={1,2,7}; ListNode* Head1=CreateList(a,5); ListNode* Head2=CreateList(b,3); PrintList(Head1); PrintList(Head2); ListNode* Head3=MergeLink(Head1,Head2); PrintList(Head3); }
Java代码:
public class MergeLink { public static class ListNode { int m_nValue; ListNode m_pNext; }; public static ListNode CreateList(int[] a,int b) { ListNode pHead=null,pNode=null; for(int i=0;i<b;i++) { ListNode pNew=new ListNode(); pNew.m_nValue=a[i]; pNew.m_pNext=null; if(pHead==null) { pHead=pNew; pNode=pNew; } else { pNode.m_pNext=pNew; pNode=pNode.m_pNext; } } return pHead; } public static void PrintList(ListNode pHead) { if(pHead==null) { return; } ListNode pNode=pHead; while(pNode!=null) { System.out.print(pNode.m_nValue+" "); pNode=pNode.m_pNext; } System.out.println(); } public static ListNode MergeLink(ListNode Head1,ListNode Head2) { ListNode MergeHead=null; if(Head1==null) return Head2; if(Head2==null) return Head1; if(Head1==null&&Head2==null) return null; if(Head1.m_nValue>Head2.m_nValue) { MergeHead=Head2; Head2.m_pNext=MergeLink(Head2.m_pNext,Head1); } else { MergeHead=Head1; Head1.m_pNext=MergeLink(Head1.m_pNext,Head2); } return MergeHead; } public static void main(String[] args) { int a[]={3,4,5,6,8}; int b[]={1,2,7}; ListNode Head1=CreateList(a,5); ListNode Head2=CreateList(b,3); PrintList(Head1); PrintList(Head2); ListNode Head3=MergeLink(Head1,Head2); PrintList(Head3); } }
相关文章推荐
- JSON实战案例--使用JSON进行数据交换实例
- css3做的圆特效
- Json日期转换误差
- 又一个前端的小渣渣诞生了
- 前端调试技巧
- 一只在读iOS菜鸟十个月来从零基础到拿到实习Offer的总结
- JQuery(DOM操作)
- jquery判断元素是否有某个属性
- 基于jQuery图片元素网格布局插件
- 57 js 背景图片以及背景色
- 向CDH5集群中添加新的主机节点
- JavaScript 常用互动方法
- Node.js学习--基础知识(8)--全局对象和全局变量
- Javascript模块化编程(一):模块的写法
- JS类库函数收集中....
- extjs
- jquery parent() parents() closest()区别
- 使用jquery过滤上传文件的类型和限制文件的大小
- [Mozilla]AJAX快速入门
- jQuery方法区别:click() bind() live() delegate()区别