Swap Nodes in Pairs
2016-05-27 10:14
375 查看
Given a linked list, swap every two adjacent nodes and return its head.
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.
思路:题目要求交换链表的相邻的两个节点,但是不许修改节点的数据,只是移动节点的位置。可以给这个链接加一个头节点然后进行处理,代码如下:
/**
* 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 *res=new ListNode(0),*pre=res,*cur;
pre->next=head;
cur=head;
while(cur&&cur->next)
{
pre->next=cur->next;
cur->next=cur->next->next;
pre->next->next=cur;
pre=cur;
cur=cur->next;
}
return res->next;
}
};方法二:在discuss上看到有使用递归的方式,可以参考下
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head == NULL||head->next==NULL)
return head;
ListNode* next = head->next;
head->next = swapPairs(next->next);
next->next = head;
return next;
}
};
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.
思路:题目要求交换链表的相邻的两个节点,但是不许修改节点的数据,只是移动节点的位置。可以给这个链接加一个头节点然后进行处理,代码如下:
/**
* 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 *res=new ListNode(0),*pre=res,*cur;
pre->next=head;
cur=head;
while(cur&&cur->next)
{
pre->next=cur->next;
cur->next=cur->next->next;
pre->next->next=cur;
pre=cur;
cur=cur->next;
}
return res->next;
}
};方法二:在discuss上看到有使用递归的方式,可以参考下
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head == NULL||head->next==NULL)
return head;
ListNode* next = head->next;
head->next = swapPairs(next->next);
next->next = head;
return next;
}
};
相关文章推荐
- Nodejs pk Java 第1回合:初次交锋
- nodejs child_process
- YARN的入门学习心得:
- NodeJS Addon 多线程
- HDFS入门了解心得
- node前端自动化
- nodejs,npm 安装配置步骤
- nodejs,npm 安装配置步骤
- LeetCode:Delete Node in a Linked List
- node:基于事件驱动的回调
- Node.js的npm包管理器基础使用教程
- 24. Swap Nodes in Pairs -leetcode-java
- 【深入浅出Node.js系列八】一个基于Node.js完整的Web应用实战
- 【深入浅出Node.js系列七】Connect模块解析
- 【深入浅出Node.js系列六】Buffer那些事儿
- 【深入浅出Node.js系列五】初探Node.js的异步I/O实现
- nodejs 热更新
- 【深入浅出Node.js系列四】Node.js的事件机制
- 【深入浅出Node.js系列三】深入Node.js的模块机制
- 【深入浅出Node.js系列二】Node.js&NPM的安装与配置