Swap Nodes in Pairs
2015-06-15 18:04
639 查看
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.
思路:记录两个工作指针 p和q;
记录原来链表的当前位置cur;
记录新链表的尾指针curlist;
一对一对进行交换即可!
/**
* 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)
return NULL;
if(head->next == NULL)
return head;
ListNode * q = head;
ListNode * p = q->next;
ListNode * cur = head->next->next;//旧节点未加入初始节点
ListNode * curlist = head;//新链表的尾节点
/*链表头交换*/
q ->next = p->next;
p->next = q;
head = p;//当前链表的头节点
curlist = q;//当前链表的尾节点
/*链表 恢复*/
if(cur == NULL )
return head;
if(cur->next == NULL)
{
curlist->next = cur;
return head;
}
while(cur != NULL && cur->next != NULL)
{
q = cur;//原来链表的位置
p = cur->next;
cur = cur->next->next;
q ->next = p->next;
p->next = q;
curlist->next = p;
curlist = q;
if(cur == NULL)
return head;
if(cur->next == NULL)
{
curlist->next = cur;
return 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.
思路:记录两个工作指针 p和q;
记录原来链表的当前位置cur;
记录新链表的尾指针curlist;
一对一对进行交换即可!
/**
* 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)
return NULL;
if(head->next == NULL)
return head;
ListNode * q = head;
ListNode * p = q->next;
ListNode * cur = head->next->next;//旧节点未加入初始节点
ListNode * curlist = head;//新链表的尾节点
/*链表头交换*/
q ->next = p->next;
p->next = q;
head = p;//当前链表的头节点
curlist = q;//当前链表的尾节点
/*链表 恢复*/
if(cur == NULL )
return head;
if(cur->next == NULL)
{
curlist->next = cur;
return head;
}
while(cur != NULL && cur->next != NULL)
{
q = cur;//原来链表的位置
p = cur->next;
cur = cur->next->next;
q ->next = p->next;
p->next = q;
curlist->next = p;
curlist = q;
if(cur == NULL)
return head;
if(cur->next == NULL)
{
curlist->next = cur;
return head;
}
}
}
};
相关文章推荐
- Java for LeetCode 222 Count Complete Tree Nodes
- Reverse Nodes in k-Group
- Node.js学习
- Node.js学习--基础知识(8)--全局对象和全局变量
- Hadoop 2.0 NameNode HA和Federation实践
- 【转】nodejs 模块加载
- Node.js学习--基础知识(5)--npm
- nodejs 中压缩/解压方案
- Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()
- node.js 初体验
- Node.js+Yeoman构建前端自动化Web应用
- HDU 4587 Two Nodes、POJ 2375 Reliable Nets (Tarjan)
- Clone Graph Leetcode 133
- DOM Nodes
- leetcode--Populating Next Right Pointers in Each Node
- Swap Nodes in Pairs
- 文件系统(一)--super.c bitmap.c inode.c 源码分析
- Swap Nodes in Pairs
- 19 Remove Nth Node From End of List(去掉链表中倒数第n个节点Easy)
- 一晚上 -- Populating Next Right Pointers in Each Node II