• 反转指定区间内链表


    题目:
    Reverse a linked list from position m to n. Do it in-place and in one-pass.
    For example:
    Given1->2->3->4->5->NULL, m = 2 and n = 4,
    return1->4->3->2->5->NULL.
    Note: 
    Given m, n satisfy the following condition:
    1 ≤ m ≤ n ≤ length of list.
     
     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==NULL || head->next==NULL)  return head;
    13         
    14         ListNode *dummy = new ListNode(0);
    15         dummy->next = head;
    16         ListNode *prev, *p, *q, *last;
    17         //得到m处的结点
    18         p = head;
    19         for(int i=1;i<m;i++)
    20         {p = p->next;}
    21         //得到n处的结点
    22         q = p;
    23         int x = n-m;
    24         for(int j=0;j<x;j++)
    25         { q = q->next;}
    26         //设定last,断开n处结点与后面的结点
    27         last = q->next;
    28         q->next = NULL;
    29         //设定prev,断开m处结点与前面的结点
    30         prev = dummy;
    31         int y = m;
    32         for(int z=1;z<y;z++)
    33         { prev = prev->next;}
    34         prev->next = NULL;
    35         
    36         //反转m与n区间间的结点
    37         ListNode *tmp1 = p->next;
    38         ListNode *tmp2;
    39         ListNode *last_new = p;   //lat_new存储反转后的尾结点
    40         p->next = NULL;
    41         while(tmp1!=NULL)
    42         {
    43             tmp2 = tmp1->next;
    44             tmp1->next = p;
    45             p = tmp1;
    46             tmp1 = tmp2;
    47         }
    48         ListNode *fir_new = p;
    49         
    50         //重新连接
    51         prev->next = fir_new;
    52         last_new->next = last;
    53         
    54         return dummy->next;
    55     }
    56 };
  • 相关阅读:
    SQL经常使用语法
    【LeetCode】Generate Parentheses 解题报告
    Linux进程间通信(IPC)
    Android菜单menu控件大全
    Android入门常见问题
    c++ struct与class的差别
    hdu 2011 多项式求和
    Android安全机制介绍
    HDOJ 4003 Find Metal Mineral
    HDU 2845 Beans (两次线性dp)
  • 原文地址:https://www.cnblogs.com/dzy521/p/9144697.html
Copyright © 2020-2023  润新知