zoukankan      html  css  js  c++  java
  • 反转指定区间内链表

    题目:
    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 };
  • 相关阅读:
    软件开发人员的简历项目经验怎么写?
    mapreduce 多种输入
    lnmp如何实现伪静态,默认目录伪静态
    LNMP环境中WordPress程序伪静态解决方案
    wordpress必装的插件 wp最常用的十个插件
    debian系统下改语言设置
    Centos7 开启端口
    EventProcessor与WorkPool用法--可处理多消费者
    Disruptor入门
    Disruptor初级入门
  • 原文地址:https://www.cnblogs.com/dzy521/p/9144697.html
Copyright © 2011-2022 走看看