赞
踩
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.
本题的大意就是交换链表中相邻的结点,限定常数的空间复杂度
解析:
因为是两两交换结点,因此我们可以将“一个很长的链表进行两两反转结点”这个大问题分解成一个个像“反转只有两个结点or更少”这样的子问题,又因为每个子问题都是相同的,因此我们可以采用分支策略(递归)
算法描述:
Paste_Image.png
注意事项:
递归一定要注意递归出口,注意栈溢出
代码:
/**
* 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)
return null;
if(head.next == null)
return head;
ListNode temp = head.next;
head.next = swapPairs(temp.next);
temp.next = head;
return temp;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。