将单链表中相邻两节点对换

class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

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

    public ListNode swapPairs2(ListNode head) {
        if(head == null || head.next == null)
            return head;
        ListNode first = head.next;
        ListNode q;
        while (head != null && head.next != null){
            q = head.next.next;
            head.next.next = head;
            if(q != null && q.next != null)
                head.next = q.next;
            else
                head.next = q;
            head = q;
        }
        return first;
    }

    public static ListNode swapPairs3(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;

        ListNode curr = dummyHead;
        while (curr.next != null && curr.next.next != null) {
            ListNode node1 = curr.next;
            ListNode node2 = curr.next.next;
            ListNode next = node2.next;

            node2.next = node1;
            node1.next = next;

            curr.next = node2;
            curr = node1;
        }

        return dummyHead.next;
    }

    static public void print(ListNode head){
        while (head != null){
            System.out.print(head.val + " ");
            head = head.next;
        }
        System.out.println();
    }

    public static void main(String[] args){
        ListNode one = new ListNode(1);
        ListNode two = new ListNode(2);
        ListNode three = new ListNode(3);
        ListNode four = new ListNode(4);
        ListNode five = new ListNode(5);
        one.next = two;
        two.next = three;
        three.next = four;
        four.next = five;
        ListNode result1 = new Solution().swapPairs1(one);
        print(result1);
        ListNode result2 = new Solution().swapPairs2(result1);
        print(result2);
        ListNode result3 = new Solution().swapPairs3(result2);
        print(result3);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值