[2014微软笔试]按要求调整链表元素顺序,空间复杂度O(1)

来源:互联网 发布:淘宝终身无法评价 编辑:程序博客网 时间:2024/04/29 13:31
/*Given a singly linked list L:(L0, L1, L2, ..., L(n-1), Ln).Write a program to reorder it so that it becomes (L0, Ln, L1, L(n-1), L2, L(n-2),...)Notes:1) Space Complexity should be O(1).2) Only the ".m_pNext" filed of a node is modifiable.*/#include <iostream>using namespace std;struct Node{int m_Data;Node *m_pNext;};typedef Node LinkedList;void reorderLinkedList(LinkedList **pHead){if (pHead==NULL || *pHead==NULL ){return;}Node *pBegin = *pHead;Node *pEnd = *pHead;while (pEnd->m_pNext){pEnd = pEnd->m_pNext;}while (pEnd!=pBegin && pEnd!=pBegin->m_pNext){Node *pNext = pBegin->m_pNext;Node *pTemp = NULL;pBegin->m_pNext = pEnd;pEnd->m_pNext = pNext;pBegin = pNext;pTemp = pNext;while (pTemp->m_pNext != pEnd){pTemp = pTemp->m_pNext;}pTemp->m_pNext = NULL;pEnd = pTemp;}}int main(){Node a0 = {1, NULL};Node a1 = {2, NULL};Node a2 = {3, NULL};Node a3 = {4, NULL};Node a4 = {5, NULL};Node a5 = {6, NULL};a0.m_pNext = &a1;a1.m_pNext = &a2;a2.m_pNext = &a3;a3.m_pNext = &a4;a4.m_pNext = &a5;Node *p = &a0;cout<<"Original Sequence:"<<endl;while (p){cout<<p->m_Data<<" "<<endl;p = p->m_pNext;}p = &a0;reorderLinkedList(&p);cout<<"Re-ordered Sequence:"<<endl;while (p){cout<<p->m_Data<<" "<<endl;p = p->m_pNext;}return 0;}