链表反转程序

来源:互联网 发布:mac os无guid分区表 编辑:程序博客网 时间:2024/06/05 14:16

2014美团网笔试题里有一道链表反转的题目,要求是给出一个链表和一个数,求这个链表的分段反转。比如输入1->2->3->4->5->6和2,输出为2->1->4->3->6->5;若数为3,输出3->2->1->6->5->4;若为4,输出4->3->2->1->5->6。

我的方法是用栈,代码如下:


#include<stack>using namespace std;stack<Link*> s;void LinkTest(){printf("enter link elem:\n");char c;Link* LinkHead = NULL;Link* LinkIndex = NULL;int LinkLen = 0;// 链表初始化while ((c = getchar()) != '\n')    {if (c == ' ')continue;if (LinkLen == 0){LinkHead = new Link;LinkHead->elem = c;LinkIndex = LinkHead;LinkIndex->next = NULL;}else{LinkIndex->next = new Link;LinkIndex = LinkIndex->next;LinkIndex->elem = c;LinkIndex->next = NULL;}LinkLen++;    }printf("\n");printf("enter reverse length:\n");int RevLen;scanf("%d",&RevLen);printf("\n");if (RevLen < 1)return;// 反转链表LinkIndex = LinkHead;int count1 = 0;Link* Pre = NULL;while(LinkIndex != NULL){if (count1 % RevLen == 0 && count1 != 0){if (Pre == NULL)LinkHead = s.top();elsePre->next = s.top();Link* LinkTmpHead = s.top();Link* LinkTmp = s.top();s.pop();while(!s.empty()){LinkTmp->next = s.top();LinkTmp = LinkTmp->next;s.pop();}Pre = LinkTmp;LinkTmp->next = LinkIndex;}if (LinkIndex != NULL){s.push(LinkIndex);LinkIndex = LinkIndex->next;}count1++;}// 显示反转后的链表LinkIndex = LinkHead;while(LinkIndex != NULL){printf("%c",LinkIndex->elem);LinkIndex = LinkIndex->next;}printf("\n");}


0 0
原创粉丝点击