leetCode_024 两两交换链表中的节点

题目:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

直接上代码:

        public static ListNode swapPairs(ListNode head) {
            //判断为空或者只有一个节点的情况
            if(head == null || head.next == null) return head;
            //初始化一个next节点
            ListNode next = head.next;//将next节点指向head的下一个节点
            head.next = swapPairs(next.next);//head节点指向后面进行递归操作的节点
            next.next = head;//next指向head节点
            return next;//由于next为新的头节点,返回next节点
        }

写一个测试用例进行测试:

package leetCode_024;


public class SwapPairs {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }

        public static String print(ListNode listNode){//打印节点的方法
            StringBuilder sb = new StringBuilder();
            while (listNode!=null){
                sb.append(listNode.val);
                listNode = listNode.next;
            }
            return sb.toString();
        }
    }


        public static ListNode swapPairs(ListNode head) {
            //判断为空或者只有一个节点的情况
            if(head == null || head.next == null) return head;
            //初始化一个next节点
            ListNode next = head.next;//将next节点指向head的下一个节点
            head.next = swapPairs(next.next);//head节点指向后面进行递归操作的节点
            next.next = head;//next指向head节点
            return next;//由于next为新的头节点,返回next节点
        }


    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);//新建节点1
        listNode.next = new ListNode(2);//1指向下一个节点2
        listNode.next.next = new ListNode(3);//2指向下一个节点3
        listNode.next.next.next = new ListNode(4);//3指向下一个节点4
        System.out.println(listNode.print(listNode));//1234
        listNode = swapPairs(listNode);//两两交换其中相邻的节点,并返回交换后的链表
        System.out.println(listNode.print(listNode));//2143
    }
}

解题方法请访问B站https://www.bilibili.com/video/BV1pJ411s7P4?p=1

至此结束。

猜你喜欢

转载自blog.csdn.net/weixin_43419256/article/details/107788519