LeetCode-24-Swap Nodes in Pairs(链表)-Medium
2015-12-29 08:23
555 查看
题意理解:
交换链表中相邻的两个元素,如原链表为a->b->c->d,修改为b->a->d->c;
题目分析:
1. 不能重新分配多余内存,即只修改指针指向,不增加新的节点内容;
2. 标示要处理的两个相邻元素位置p1,p2,以及p1之前的位置pPre和p2之后的位置pNext;
3. 根据题目要求交换对应位置指针的指向内容;
解题代码:
交换链表中相邻的两个元素,如原链表为a->b->c->d,修改为b->a->d->c;
题目分析:
1. 不能重新分配多余内存,即只修改指针指向,不增加新的节点内容;
2. 标示要处理的两个相邻元素位置p1,p2,以及p1之前的位置pPre和p2之后的位置pNext;
3. 根据题目要求交换对应位置指针的指向内容;
解题代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode* ans=head; int size=0; ListNode* pCur=head; while(pCur!=NULL){ size++; pCur=pCur->next; } pCur=head; if(size<=1){ return ans; } ListNode* pPre=new ListNode(0); ans=pPre; ListNode* p1; ListNode* p2; ListNode* pNext; for(int i=0; i<size; i+=2){ if(i==0){ pNext=head->next->next; p1=head; p2=head->next; } pPre->next=p2; p2->next=p1; p1->next=pNext; if(i+2>=size-1){ break; } pPre=p1; p1=pPre->next; p2=p1->next; pNext=p2->next; } return ans->next; } };
相关文章推荐
- DOM中的动态NodeList与静态NodeList
- Node.js JXcore 打包
- Node.js 多进程
- 关于dom中的nodeName,nodeType,nodeValue
- Ubuntu 15.04用包管理器安装node.js
- nodejs 命令行参数辅助
- nodejs 系统 临时文件夹
- NameNode 的主备切换实现
- NameNode 高可用整体架构概述
- Node初学者入门,一本全面的NodeJS教程
- nodejs 漂亮的命令行输出
- Web平台能从Node.js学到什么
- nodejs-webkit开机自启动
- 更新 freenode irc 邮箱
- freenode irc 如何注册
- webkit--nodejs
- nodeJs学习
- Nodejs express框架一个工程中同时使用ejs模版和jade模版
- 为什么说fb_info->node 是设备的次设备号
- nodejs express框架一个工程中同时使用ejs模版和jade模版