• [LeetCode]92. 反转链表 II


    题目

    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

    说明:
    1 ≤ m ≤ n ≤ 链表长度。

    题解

    • 核心反转的部分和反转链表每k个节点是相同的。抽象为反转beg到end ,并连接l、r,即需要参数(l,beg,end,r。);pre初始化为beg,cur初始化为end,前提是保证beg end部分至少有两个节点。然后反转内部用反转的三个指针的方法走即可。

    • 为了保证区间反转代码至少含含两个节点(m<n),m==n特例直接return。

    • 加一个临时头节点。

    • 综上。1 判m==n;2 加临时头节点;3 找到l的位置 4 初始化lNext位置(为连接两端准备),初始化pre、cur、next,然后开始区间反转。

    代码

    class ListNode {
       int val;
       ListNode next;
       ListNode(int x) { val = x; }
    }
    
    
    public class Main {
    	public static void main(String args[]) {
    		//test
    		ListNode n1=new ListNode(1);
    		ListNode n2=new ListNode(2);
    		ListNode n3=new ListNode(3);
    		ListNode n4=new ListNode(4);
    		ListNode n5=new ListNode(5);
    		n1.next=n2;
    		n2.next=n3;
    		n3.next=n4;
    		n4.next=n5;
    		ListNode head=n1;
    		
    		ListNode newHead=reverseBetween(head,2,4);
    		ListNode pNode=newHead;
    		while(pNode!=null) {
    			System.out.println(pNode.val);
    			pNode=pNode.next;
    		}
    	}
    	
    	public static ListNode reverseBetween(ListNode head, int m, int n) {
            if(m==n){
                return head;
            }
            
            ListNode tempHead=new ListNode(-1);
            tempHead.next=head;
            
            ListNode l=tempHead;
            for(int i=1;i<m;++i){
                l=l.next;
            }
            
            ListNode pre=l.next; ListNode lNext=l.next;
            ListNode cur=pre.next;
            ListNode next=null;
            for(int i=m;i<n;++i){
                next=cur.next;
                cur.next=pre;
                pre=cur;
                cur=next;
            }
            
            l.next=pre;
            lNext.next=cur;
            
            return tempHead.next;
        }
    }
    
  • 相关阅读:
    白盒测试相关内容总结
    黑盒测试相关内容总结
    int.parse的出错异常处理
    逃的过初一逃不过十五之三个输入框文本内容检测的实现及测试
    EditBox问题等价类划分
    关于课堂上Exercise#1的讨论
    js中关于事件处理函数名后面是否带括号的问题
    关于提升和作用域的一道有趣的题目
    绝对定位对元素宽度的影响
    js异步函数队列
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11217952.html
Copyright © 2020-2023  润新知