您的位置:首页 > Web前端 > Node.js

leetcode 24. Swap Nodes in Pairs

2016-06-28 13:00 1051 查看
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.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next==null){
return head;
}

ListNode a = head;
ListNode b = a.next;
ListNode c = null;
head = b;
while(a.next != null){

/*loop*/
a.next = a.next.next;
b.next = a;
c = a;
/*move*/
if(a.next == null){
break;
}

a = a.next;
if(a.next == null){
break;
}
b = a.next;
/*reassign c.next*/
c.next = b;
}
return head;
}
}

时间复杂度O(n), 空间复杂度O(1)。

在论坛上看到了用递归的,代码给简洁原地址

public class Solution {
public ListNode swapPairs(ListNode head) {
if ((head == null)||(head.next == null))
return head;
ListNode n = head.next;
head.next = swapPairs(head.next.next);
n.next = head;
return n;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode List