微软2014校招笔试编程题
2013-09-30 16:39
288 查看
Given asingly linked list L:(L0,L1,L2,...,Ln-1,Ln).Write a program to reorder it so that it becomes(L0,Ln,L1,Ln-1,L2,Ln-2,...)
struct Node
{
int val_;
Node* next;
};
Notes:
1.Space Complexity should be O(1)
2.Only the ".next" field of a node is modifiable.
新方法:[传送门](2013.11.16 update)
总结:1.离开了VS,自己手写并且能够写对还是很困难。
2.时间复杂度O(n2),应该还可以优化。
欢迎批评指正!
struct Node
{
int val_;
Node* next;
};
Notes:
1.Space Complexity should be O(1)
2.Only the ".next" field of a node is modifiable.
新方法:[传送门](2013.11.16 update)
#include"stdafx.h" #include<iostream> using namespace std; struct Node { int val_; Node* next; }; Node *CreateListNode(int key) { Node *ListNode=new Node; ListNode->val_=key; ListNode->next=NULL; return ListNode; } void ConnectListNodes(Node *ListNode1,Node *ListNode2) { ListNode1->next=ListNode2; } void PrintList(Node *ListHead) { Node* p=ListHead; while(p!=NULL) { cout<<p->val_<<" "; p=p->next; } cout<<endl; } void ReorderList(Node *ListHead) { Node *i,*j,*p,*q; i=ListHead; while(i&&i->next!=NULL) { j=i->next; p=i; q=i->next; while(q->next!=NULL) { p=p->next; q=q->next; } if(q!=j) { i->next=q; q->next=j; p->next=NULL; } else { i->next=q; } i=j; j=j->next; } } void DestroyList(Node *ListHead) { ListHead=NULL; } void Test(Node* ListHead) { PrintList(ListHead); ReorderList(ListHead); PrintList(ListHead); } // 0->1->2->3->4->5 void Test1() { cout<<"Test1 begins."<<endl; Node *ListNode0=CreateListNode(0); Node *ListNode1=CreateListNode(1); Node *ListNode2=CreateListNode(2); Node *ListNode3=CreateListNode(3); Node *ListNode4=CreateListNode(4); Node *ListNode5=CreateListNode(5); ConnectListNodes(ListNode0,ListNode1); ConnectListNodes(ListNode1,ListNode2); ConnectListNodes(ListNode2,ListNode3); ConnectListNodes(ListNode3,ListNode4); ConnectListNodes(ListNode4,ListNode5); Test(ListNode0); DestroyList(ListNode0); } // 0->1->2->3->4->5->6 void Test2() { cout<<"Test2 begins."<<endl; Node *ListNode0=CreateListNode(0); Node *ListNode1=CreateListNode(1); Node *ListNode2=CreateListNode(2); Node *ListNode3=CreateListNode(3); Node *ListNode4=CreateListNode(4); Node *ListNode5=CreateListNode(5); Node *ListNode6=CreateListNode(6); ConnectListNodes(ListNode0,ListNode1); ConnectListNodes(ListNode1,ListNode2); ConnectListNodes(ListNode2,ListNode3); ConnectListNodes(ListNode3,ListNode4); ConnectListNodes(ListNode4,ListNode5); ConnectListNodes(ListNode5,ListNode6); Test(ListNode0); DestroyList(ListNode0); } // 只有一个结点 void Test3() { cout<<"Test3 begins."<<endl; Node* ListNode0=CreateListNode(0); Test(ListNode0); DestroyList(ListNode0); } // 空链表 void Test4() { cout<<"Test4 begins."<<endl; Test(NULL); } int main() { Test1(); Test2(); Test3(); Test4(); return 0; }
总结:1.离开了VS,自己手写并且能够写对还是很困难。
2.时间复杂度O(n2),应该还可以优化。
欢迎批评指正!
相关文章推荐
- 2014 微软校招笔试答案 编程题
- 2014微软秋季校招算法笔试题
- 微软2014校招笔试题-String reorder
- 微软2014校招笔试题-String reorder
- 2014 微软校招笔试题以及答案(求指正)
- 迅雷2014校招笔试编程题--求单链表的差集
- 微软2014校园招聘笔试编程题
- 迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储
- 【2014校招】微软笔试
- (网易2018校招笔试)[编程题] 魔法币
- 微软2014校园招聘笔试试题
- 2017腾讯校招笔试编程题-拼凑零钱
- 2012年微软校招实习生笔试题(2012.4.7)
- 微软校招笔试题#1092 : Have Lunch Together详解以及源码分析
- [综合面试] IT面试2014校招笔试面试全面总结分析回顾
- 微软2017校招编程题 Composition(DP)
- 迅雷2014校招编程题
- 【2014微软实习生笔试】2:找到第k个字符串
- 搜狗2016年校招笔试编程题记录+总结
- 一道百度2014校招笔试题