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
}
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务