【面试题17】将两个有序的链表合并
2015-09-14 22:00
519 查看
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}//成员中有指针,一定要重载构造函数 ListNode(){}//保留默认构造函数 }; //创建一个链表结点 ListNode* CreateListNode(int value) { ListNode *pNode = new ListNode(); pNode->val = value; pNode->next = NULL; return pNode; } //往链表末尾添加结点 /* 注意这里pHead是一个指向指针的指针,在主函数中一般传递的是引用。 因为如果要为链表添加结点,那么就会修改链表结构,所以必须传递引用才能够保存修改后的结构。 */ void AddToTail(ListNode** pHead, int value) { ListNode* pNew = new ListNode();//新插入的结点 pNew->val = value; pNew->next = NULL; if (*pHead == NULL)//空链表 { *pHead = pNew; } else { ListNode* pNode = *pHead; while (pNode->next != NULL) pNode = pNode->next; pNode->next = pNew; } } //遍历链表中的所有结点 void PrintList(ListNode* pHead) { ListNode *pNode = pHead; while (pNode != NULL) { cout << pNode->val << " "; pNode = pNode->next; } cout << endl; } ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == NULL&&pHead2 == NULL) return NULL; else if (pHead1 == NULL&&pHead2 != NULL) return pHead2; else if (pHead1 != NULL&&pHead2 == NULL) return pHead1; else { ListNode *p1 = pHead1; ListNode *p2 = pHead2; ListNode *pHead = NULL; if (p1->val>p2->val) { pHead = p2; p2 = p2->next; } else { pHead = p1; p1 = p1->next; } ListNode *p = pHead; while (p1 != NULL&&p2 != NULL) { if (p1->val>p2->val) { p->next = p2; p = p2; p2 = p2->next; } else { p->next = p1; p = p1; p1 = p1->next; } } while (p1 != NULL) { p->next = p1; p = p1; p1 = p1->next; } while (p2 != NULL) { p->next = p2; p = p2; p2 = p2->next; } return pHead; } } void main() { //创建结点 ListNode* pNode1 = CreateListNode(1);//创建一个结点 ListNode* pNode2 = CreateListNode(2);//创建一个结点 //往链表中添加新结点 AddToTail(&pNode1, 3); AddToTail(&pNode2, 4); AddToTail(&pNode1, 5); AddToTail(&pNode2, 6); /*AddToTail(&pNode1, 7); AddToTail(&pNode2, 8);*/ ListNode* p = Merge(pNode1, pNode2); PrintList(p);//打印 system("pause"); }
相关文章推荐
- java虚拟机的面试问题
- 前端开发面试要点及对策
- PHP经典面试题汇总含答案
- 网易面试问题
- 程序员收集的书单
- 黑马程序员---Java基础---java语言基本组成:语句
- 去哪儿网面试总结
- 黑马程序员——配置,操作文件
- 2016年美的校招面试
- 面试题总结 101-125
- 面试题总结 51-100
- [.Net码农].NET 分布式架构开发实战 之 故事起源
- 面试题总结1-50
- 面试--缓存机制
- 提升程序员开发技术的十个技巧(从别处摘来,和大家分享~~)
- cvte面试
- 黑马程序员——面向对象(继承02)-第19天
- 黑马程序员学习(二) JAVA基本语句
- 剑指Offer-第2章 面试需要的基础知识
- 已知13个球和一个天平,其中有一个坏球,但是不知道是轻还是重,请用天平秤三次,找到这个坏球。