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

(Java)LeetCode-24. Swap Nodes in Pairs

2016-06-02 16:53 513 查看
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.

这道题是简单难度的,我最开始打算用递归来两两求解的,不过后来发现不用这样,就从前往后每两个颠倒一下顺序即可,如果是奇数个则最后一个不用管。就是交换位置时编程稍有些麻烦,不过仔细点就可以做出来的,时间也很快,不到1ms

/**
* 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) {
ListNode root = new ListNode(-1);
root.next = head;
ListNode pre_head = root;
while(head != null && head.next!= null){
ListNode Node1 = head;
ListNode Node2 = head.next.next;
root.next = head.next;
root = root.next;
root.next = Node1;
Node1.next = Node2;
root = root.next;
head = Node2;

}
return pre_head.next;
}
}

如果采用递归的话,代码看起来会更整洁,因为有一个每一小段的头节点可以用函数直接返回,代码如下~:

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