#leetcode#24. Swap Nodes in Pairs
2016-04-28 21:00
453 查看
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
没什么难的
就是注意NULL的情况
以及开始的情况
直接新建一个开头
非递归
/**
* 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) {
if(head==NULL||head->next==NULL)
return head;
ListNode *newhead = new ListNode(0);
newhead->next=head;
ListNode *start=newhead;
ListNode *swap1=head;
ListNode *swap2=head->next;
ListNode *end=NULL;
while(swap1!=NULL && swap2!=NULL)
{
if(swap2->next!=NULL)
end=swap2->next;
else
end=NULL;
swap1->next=end;
swap2->next=swap1;
start->next=swap2;
start=swap1;
swap1=end;
if(swap1!=NULL && swap1->next!=NULL)
swap2=swap1->next;
else
swap2=NULL;
}
return newhead->next;
}
};
递归版
好简单
/**
* 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) {
if(head==NULL||head->next==NULL)
return head;
ListNode *newhead=head->next;
head->next=newhead->next;
newhead->next=head;
newhead->next->next=swapPairs(newhead->next->next);
return newhead;
}
};
For example,
Given
1->2->3->4, you should return the list as
2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
没什么难的
就是注意NULL的情况
以及开始的情况
直接新建一个开头
非递归
/**
* 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) {
if(head==NULL||head->next==NULL)
return head;
ListNode *newhead = new ListNode(0);
newhead->next=head;
ListNode *start=newhead;
ListNode *swap1=head;
ListNode *swap2=head->next;
ListNode *end=NULL;
while(swap1!=NULL && swap2!=NULL)
{
if(swap2->next!=NULL)
end=swap2->next;
else
end=NULL;
swap1->next=end;
swap2->next=swap1;
start->next=swap2;
start=swap1;
swap1=end;
if(swap1!=NULL && swap1->next!=NULL)
swap2=swap1->next;
else
swap2=NULL;
}
return newhead->next;
}
};
递归版
好简单
/**
* 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) {
if(head==NULL||head->next==NULL)
return head;
ListNode *newhead=head->next;
head->next=newhead->next;
newhead->next=head;
newhead->next->next=swapPairs(newhead->next->next);
return newhead;
}
};
相关文章推荐
- leetcode--Swap Nodes in Pairs
- [HDU 4587] TWO NODES (Tarjan+割点)
- node.js url
- Nodejs开发框架Express4.x开发手记(推荐阅读)
- 用node.js实现简单的web服务器
- 【Node.js】'readline' 逐行读取、写入文件内容
- Nodejs基于Express4的动态页面静态化
- node.js process
- node.js 一个简单的页面输出实现代码
- nodejs安装express不是内部或外部命令
- 在sublimetext2中安装配置Nodejs
- Node.js 究竟是什么?
- nodejs less 及时编译
- Node.JS 学习路线图
- node.js介绍及Win7环境安装测试
- node js 学习笔记(一) 常用模块介绍
- node系统OS
- DataNode引用计数磁盘选择策略
- 1.block_inode
- Node.js学习笔记