Reverse Linked List II Java

来源:互联网 发布:买家怎么进淘宝试衣间 编辑:程序博客网 时间:2024/05/20 07:51

 Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ≤ mn ≤ length of list.

Have you been asked this question in an interview?
Two Approach:


     Goal: reverse LinkNodes in range between m & n;

    Solution_1:
    Idea: easy to Implement if you fully understand the problem of Reverse Linked List
    This is just a extension.
    Use 3 addition nodes:
    Prev: point to position of m-1
    begin: point to position of m
    end: point to position of n
    call reverse function from Reverse Linked List by pass
    reverse(prev, end.next);


 public ListNode reverseBetween(ListNode head, int m, int n) {        if(head==null | head.next==null) return head;        ListNode dummy=new ListNode(0);        dummy.next=head;        ListNode prev=dummy;        ListNode begin=head;       while(m>1){             prev=begin;            begin=begin.next;            m--;        }        ListNode end=head;        while(n>1){            end=end.next;            n--;        }        reverse(prev,end.next);        return dummy.next;    }    private ListNode reverse(ListNode dummy,ListNode afterend){        ListNode prev=dummy;        ListNode cur=dummy.next;        ListNode nextNode=cur.next;        while(nextNode!=afterend){            cur.next=nextNode.next;            nextNode.next=prev.next;            prev.next=nextNode;            nextNode=cur.next;        }        return dummy.next;    }


Solution_2:
Key to solve:
Find 4 additional node as well, prevDummy, nextDummy, beign and end
prevDummy: connect with begin
beign: connect with end
nextDummy: store connection for end.next
end: connect with begin

In case of Given 1->2->3->4->5->NULL, m = 2 and n = 4,
beign node: 2; end node 4;
then reverse node using iterating methond of while loop
loop 1:  1->3->4->2->5->NULL
loop 2:  1->4->3->2->5->NULL
until beign==end, excit loop

 public ListNode reverseBetween(ListNode head, int m, int n) {            if(head==null || head.next==null) return head;            ListNode prevDummy=new ListNode(0);            prevDummy.next=head;            ListNode nextDummy;            ListNode begin=head;            for (int i=1;i<m;i++) {                prevDummy=begin;                begin=begin.next;            }            ListNode end=head;            for(int j=1;j<n;j++){                end=end.next;            }            while(begin!=end){                //save end.next into nextDummy node                nextDummy=end.next;                //move reverse node after end node                end.next=begin;                //connect to next node                prevDummy.next=begin.next;                //connect to right most portion                begin.next=nextDummy;                //connect to left most portion                begin=prevDummy.next;            }            //becareful: in case of reverse from begin to n =>m==1            if(m==1) return prevDummy.next;            else return head;        }





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 扣扣更改密保手机失败怎么办 至尊宝安全模式密保手机更换怎么办 微信号手机号换了密码忘记了怎么办 被加盟网店托管骗了怎么办 善林金融倒闭投资者的钱怎么办? 微信支付密码忘了怎么办没绑卡 美团外卖没有骑手接单怎么办 发微信的"发送"没有了怎么办 华硕电脑下面的任务栏卡住了怎么办 微信登别人电脑上忘记退了怎么办 买手机买全新结果买到翻新机怎么办 苹果手机激活锁忘了id账号怎么办 淘宝很多产品都需要3c怎么办 小米mix装在兜里还能解锁怎么办 痰咳不出来憋的嘴唇紫了怎么办 京东闪电退款后不给退货怎么办 我的中国银行卡在异地被冻结怎么办 qq密保号码换了验证不了怎么办 qq登陆需要密保手机验证怎么办 微信漂流瓶被投诉收不到回复怎么办 电视的屏幕出现三条黑线怎么办 付了定金的房子不想要了怎么办 顾客刚买了东西就退怎么办 飞机票买了但是没有报团怎么办 日本寄东西回来深圳海关扣了怎么办 xp框架安装模块后无限重启怎么办 手机百度云下载的文件不见了怎么办 百度云手机号换了文件不见了怎么办 好劵app提现密码忘了要怎么办 微信上买的衣服不给退货怎么办 在微信上买的衣服不给退货怎么办 贴贴纸的地方出现色差了怎么办 贴在玻璃上的贴纸撕掉后有胶怎么办 魅族手机部分时间上划失效怎么办 别人电脑上c盘文件无权访问怎么办 网络已连接但上不了网怎么办 asp复选框选中的有重复值怎么办 邮件在邮递中出现损坏怎么办呢? 爱彩彩票资金密码忘记了怎么办 注册彩票网站忘了资金密码怎么办 电车电瓶加水后电压变低怎么办