华为机试 - 链表翻转
来源:互联网 发布:战舰少女r魔盒数据库 编辑:程序博客网 时间:2024/06/06 00:37
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现
#include <iostream>#include <string>#include <algorithm>using namespace std;struct ListNode{int val;ListNode *link;ListNode(int v):val(v),link(NULL){ }};ListNode* reverse(ListNode *first, ListNode *second){if(first->link==second)return first;ListNode *temp=first->link;ListNode *pAhead=first->link,*pMid=pAhead->link,*pBehind=NULL;pAhead->link=second->link;while (pMid!=second){pBehind=pMid->link;pMid->link=pAhead;pAhead=pMid;pMid=pBehind;}second->link=pAhead;first->link=second;return temp;}ListNode* reverseList(ListNode *head, int k){if(k==0||k==1)return head;ListNode *leader=new ListNode(0);leader->link=head;ListNode *fisrt=leader,*second=NULL,*temp=NULL;int k_backup=k;if(k>6){second=fisrt->link;while (second!=NULL){temp=second;second=second->link;}reverse(fisrt,temp);}else{while (head!=NULL){temp=head;head=head->link;k--;if(k==1){second=head;fisrt=reverse(fisrt,second);k=k_backup;head=fisrt->link;temp=head;}}if(fisrt->link!=NULL){reverse(fisrt,temp);}}temp=leader->link;delete leader;return temp;}int main(){int n=6,k;cin>>k;ListNode *head=new ListNode(1);ListNode *temp=head;for (int i=2;i<=n;i++)temp->link=new ListNode(i),temp=temp->link;temp=reverseList(head,k);while(temp!=NULL){cout<<temp->val<<' ';temp=temp->link;}cout<<endl;system("pause");return 0;}
0 0
- 华为机试 - 链表翻转
- 华为机试—链表翻转(给出链表和数K)
- 牛客网_华为机试_012_字符串翻转
- 华为OJ1:字符串翻转
- 华为OJ:翻转字符串
- 无情链表的创建,,翻转翻转
- 链表翻转程序
- 链表翻转
- 链表翻转
- 链表翻转
- 翻转单向链表
- 翻转链表
- 原地翻转链表
- 链表的翻转
- 链表翻转
- 翻转部分链表
- 链表翻转
- 链表翻转
- asp.net健壮的错误处理
- ExtJs xtype一览表
- iOS开发控件的简单应用——UIButton
- 在菜单栏添加黑名单页面,实现取消黑名单功能
- 第一个COCOS2d项目
- 华为机试 - 链表翻转
- ZOJ1602
- iOS7- 给App添加内购& 验证购买iOS7新特性
- Socket异步句柄 ****************88
- Solr + Tomcat部署
- 初级中级高级测试工程师的区别
- 括号配对问题
- se71 form的总结
- linux下apache+SVN搭建完美版