zoukankan      html  css  js  c++  java
  • LeetCode: Reverse Linked List

    LeetCode: Reverse Linked List

    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.

    地址:https://oj.leetcode.com/problems/reverse-linked-list-ii/

    算法:先找到第m个节点p以及其前趋pre,然后把p记下,因为p是逆置链表部分的最后一个节点。然后从p开始遍历到第n个节点,并把节点依次插入pre后面,注意处理pre为空,也就是m=1的情况。代码:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *reverseBetween(ListNode *head, int m, int n) {
    12         if(!head)   return NULL;
    13         ListNode *pre = NULL;
    14         ListNode *p = head;
    15         int i = 1;
    16         while(p && i != m){
    17             pre = p;
    18             p = p->next;
    19             ++i;
    20         }
    21         if(!p)  return head;
    22         ListNode *first_reverse_node = p;
    23         if(pre){
    24             pre->next = NULL;
    25         }
    26         ListNode *q = p;
    27         while(q && i <= n){
    28             q = p->next;
    29             if(pre){
    30                 p->next = pre->next;
    31                 pre->next = p;
    32             }else{
    33                 if(p == head)
    34                     head->next = NULL;
    35                 else{
    36                     p->next = head;
    37                     head = p;
    38                 }
    39             }
    40             p = q;
    41             ++i;
    42         }
    43         first_reverse_node->next = q;
    44         return head;
    45     }
    46 };
  • 相关阅读:
    Makefile 之 $(Q)
    LeetCode-50-Pow(x, n)
    LeetCode-49. Group Anagrams
    全排列问题全面解析
    LeetCode-47. Permutations II
    LeetCode-46. Permutations
    LeetCode-43. Multiply Strings
    LeetCode-40. Combination Sum II
    LeetCode-39. Combination Sum
    LeetCode-36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/boostable/p/leetcode_reverse_linked_list.html
Copyright © 2011-2022 走看看