24. 两两交换链表中的节点

题目描述

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

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

示例:

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

思路

1.这道题可以使用递归思想求解。
2.我们只需要关注递归的上层抽象,而不需要关注递归栈内所有的操作;换句话说,我们可以只交换一下两个链表结点,然后在此基础上进行递归操作即可。
3.注意处理递归的结束条件。

单纯的交换两个结点

 ListNode next = head.next;
//我们把head.next也修改为两两交换后的结点就可以了,也就是说,从它开始进行递归操作。
 head.next = head.next.next;
 next.next = head;

Java代码实现

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

Goalng代码实现

func swapPairs(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }

    next := head.Next
    head.Next = swapPairs(next.Next)
    next.Next = head

    return next
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务