leetcode题解-24. Swap Nodes in Pairs

来源:互联网 发布:交换机端口速率配置 编辑:程序博客网 时间:2024/05/09 07:19

题目:

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.

本题相对比较简单,就是交换相邻两个元素的位置,可以使用遍历法和递归法两种方法,递归法使用两个指针记录当前要交换位置的节点,在使用另外一个指针记录他们前面的那个节点。这样就可以很方便的实现节点位置的交换,然后在给三个指针更新值即可。代码入下:

    public ListNode swapPairs(ListNode head) {        ListNode pHead = new ListNode(0);        pHead.next = head;        ListNode cur = pHead, next;        while(head != null && head.next != null){            next = head.next;            head.next = next.next;            cur.next = next;            next.next = head;cur = head;            head = head.next;        }        return pHead.next;    }

递归法就更简单了,只需要实现交换两个节点位置的功能即可,代码如下所示:

    public ListNode swapPairs1(ListNode head) {        if ((head == null)||(head.next == null))            return head;        ListNode n = head.next;        head.next = swapPairs1(head.next.next);        n.next = head;        return n;    }