很简单一道题,平铺直述的做法就是按照list的数据结构来做。之后按照递归的做法做一下,受前面merge2List的递归的启发,充分挖掘list的深层的结构特点,也就是说list的处理一般都可以用递归,就看你能不能凑齐递归的三要素。
/** * 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 dummy = new ListNode(0); dummy.next = head; ListNode curr= dummy; ListNode first, second; while(curr.next!=null&& curr.next.next!=null){ first = curr.next; second=first.next; first.next=second.next; second.next=first; curr.next=second; curr=first; } return dummy.next; } }以上代码:3 minutes bug-free下面是递归代码,找出三要素,方法论是:处理好当前状态即可:
/** * 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 first=head; ListNode second=first.next; first.next=swapPairs(second.next); second.next=first; return second; } }果然代码更加容易了,就是 只关心当面状态的处理,把未知的部分看成一个整体,这个整体就是要递归的部分,即调用自身函数的部分。同样也是3min bug-free
