24. Swap Nodes in Pairs 交换相邻链表节点

思路:情况可以分为三类:A:输入没有节点;B:输入1个节点;C:输入多个结点;其中情况C:在用了思考了交换节点,两两分组之后可以规约成:(1):奇数节点,也就是交换完成后,剩下一个前面的情况B;(2)偶数节点:刚好交完完成;

分别从这两个大类型出发设计算法如下:

public class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null)  return null;
        ListNode dump = new ListNode(-1);
        ListNode index = dump;
        while(head != null)
        {
            if(head.next == null) {
                index.next = head;
                index = index.next;
                head = head.next;
            }
            else
            {
                ListNode tmp = head;
                head = head.next.next;
                index.next = tmp.next;
                tmp.next.next = tmp;
                tmp.next = null;
                index = index.next.next;
            }
        }
        return dump.next;
    }
}

 

posted @ 2016-04-15 09:54  ProWhalen  阅读(204)  评论(0)    收藏  举报