查看: 1696| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

reverse linked list 和 Swap Nodes in Pairs的递归写法

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Reverse的可以这么写:这里,所有的操作都在递归调用的后面。
public ListNode reverseList(ListNode head) {        
        if (head == null)
                return head;                       
        if (head.next == null)
                return head;             
        ListNode rest = reverseList(head.next);      
        head.next.next = head;     
        head.next = null;
        return rest;
}

Swap Nodes in Pairs可以这么写:
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }        
        ListNode fast = head.next;//?
        head.next = swapPairs(fast.next);
        fast.next = head;        
        return fast;
    }
这里,ListNode fast = head.next是在递归调用的前面,请问可不可以把它放到递归调用的后面?如果不行的,有没有一种写法把所有的操作都放到递归调用的后面?谢谢

上一篇:Number of Islands那道题用Union Find的优点在哪?比起BFS
下一篇:lc打卡勉励
🔗
 楼主| shuatizhe 2018-5-16 10:27:48 | 只看该作者
全局:
没人刷linked list 了?
回复

使用道具 举报

🔗
pxu 2018-5-16 12:37:40 | 只看该作者
全局:
Yes, you can do it below is my code which I feel  more consistant with the reverseList code and easy to understand,
  public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        
        ListNode swappedList = swapPairs(head.next.next);
        
        ListNode newHead = head.next;
        head.next.next = head;
        head.next = swappedList;
        
        return newHead;
        
        
    }
回复

使用道具 举报

🔗
 楼主| shuatizhe 2018-5-18 09:56:19 | 只看该作者
全局:
谢谢大侠,思路很清晰巧妙!
回复

使用道具 举报

全局:
我以前也是这么想的,直到听说了stackoverflow。这么写看起来是挺炫酷的,但是如果这个linkedlist特别长呢?还是o1 space么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表