zoukankan      html  css  js  c++  java
  • 14. Reverse Linked List II

    Reverse Linked List II

    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.

    总结:其实就是反转链表。不过是反转中间一部分。要注意的是保存第一个结点的前继的指针;  若第一个结点是头结点,注意反转子串的尾结点变为头结点。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
     class Solution {
     public:
    	 ListNode *reverseBetween(ListNode *head, int m, int n) {
    		 ListNode *preNode1, *node1, *node2;
    		 preNode1 = node1 = node2 = NULL;
    		 int cnt = 0;
    		 for(ListNode *p = head; p != NULL; p = p->next) {
    			 cnt++;
    			 if(cnt == m-1) preNode1 = p; // hidden: m > 1
    			 if(cnt == m) node1 = p;
    			 if(cnt == n) { node2 = p; break; }
    		 }
    		 ListNode *tail = node2->next; // must take out as a tag.
    		 ListNode *pre = tail, *post;
    		 while(node1 != tail) {
    			 post = node1->next;
    			 node1->next = pre;
    			 pre = node1;
    			 node1 = post;
    		 }
    		 if(m > 1) { preNode1->next = node2; return head;}
    		 return node2; // node1 is the 1st node.
    	 }
     };
    
  • 相关阅读:
    Win10 蓝屏
    XE Button Color
    IOS 屏幕尺寸
    Delphi 转圈 原型进度条 AniIndicator 及线程配合使用
    Delphi 询问框 汉化
    Delphi Android 询问框
    Delphi BLE 控件
    浮点高低位赋值
    delphi 蓝牙 TBluetoothLE
    16进制字节转换
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3933965.html
Copyright © 2011-2022 走看看