博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Reverse Linked List II
阅读量:4971 次
发布时间:2019-06-12

本文共 1544 字,大约阅读时间需要 5 分钟。

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->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:

Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

 

思路:

首先把指针移动到第m个元素

然后计算需要交换的元素个数,n-m

每次交换时,把下一个元素交换到需要交换的初始位置

 1->2->3->4->5->NULL

找到交换位置

 1->2->3->4->5->NULL

把下一个元素交换到需要交换的初始位置

1->3->2->4->5->NULL

继续交换

1->4->3->2->5->NULL

 

注意初始位置在开头时,每次交换都要更新head

 

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        13        14         ListNode *p1=head;15         ListNode *p1Pre=new ListNode(0);16  17         int k=n-m;18        19         p1Pre->next=p1;20        21         ListNode *needDelete=p1Pre;22        23         while(m-1>0)24         {25             p1Pre=p1;26             p1=p1->next;27             m--;28         }29        30        31         while(k>0)32         {33             ListNode* cur=p1->next;34             p1->next=cur->next;35            36             if(p1Pre->next==head)37             {38                 head=cur;39             }40            41             cur->next=p1Pre->next;42             p1Pre->next=cur;43            44             k--;45         }46        47         delete needDelete;48         return head;49     }50 };

 

转载于:https://www.cnblogs.com/reachteam/p/4199366.html

你可能感兴趣的文章
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
bzoj 3160 万径人踪灭 —— FFT
查看>>
poj3254二进制放牛——状态压缩DP
查看>>
使用 ref 和 out 传递数组注意事项
查看>>
combobox和textbox中输入数据为非数字leave时的公用事件,只需要在控件的leave事件中选择本事件即可...
查看>>
纵越6省1市-重新启动
查看>>
hive安装以及hive on spark
查看>>
勇者无畏
查看>>
12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)
查看>>
jz1074 【基础】寻找2的幂
查看>>
Wannafly模拟赛5 A 思维 D 暴力
查看>>
C#控制台程序实现鼠标左右手习惯切换
查看>>
C++ 继承、函数重载
查看>>
Javascript获取select下拉框选中的的值
查看>>
并发编程注意的问题
查看>>
angular--ngResource的简单使用
查看>>
android本地数据库,微信数据库WCDB for Android 使用实例
查看>>
如何快速三个月成为一个领域的高手的四个方法
查看>>