链表-Reverse Linked List II

【题目要求直接翻转链表,而非申请新的空间】
这道题的一个关键在于,当m=1时,需要翻转的链表段前没有其他的结点(leetcode的测试用例不含头结点),这个特例给解题带来了一点小小的困难。一个比较直观、比较方便的想法是在链表中插入一个头结点,这样处理起来方便很多。除此之外,还要注意各种循环边界条件的设置。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {
struct ListNode * pre=(struct ListNode *)malloc(sizeof(struct ListNode));
pre->next=head;
head=pre; //插入一个头结点
struct ListNode * begin;
int i=;
while(i<m-)
{
pre=pre->next;
i++;
}
begin=pre->next;
for(i=m;i<n;i++)
{
struct ListNode *p=begin->next;
begin->next=p->next;
p->next=pre->next;
pre->next=p;
} return head->next; }
在leetcode上看到一个很简洁的代码,基本思路大致相同灵活地运用了指针,无需添加头结点,膜拜!
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode **pre = &head; //pre中存储head指针的地址
int steps = m;
while (--steps) { pre = &(*pre)->next;}
ListNode *cur = *pre; //指向翻转链表的第一个结点
for (int i = m; i < n; i++) {
ListNode *next_n = cur->next;
cur->next = next_n->next;
next_n->next = *pre;
*pre = next_n;
}
return head;
}
链表-Reverse Linked List II的更多相关文章
- LeetCode之“链表”:Reverse Linked List && Reverse Linked List II
1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...
- LeetCode 92. 反转链表 II(Reverse Linked List II)
92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...
- 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. F ...
- 【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)
题目:Reverse Linked List II 题意:Reverse a linked list from position m to n. Do it in-place and in one-p ...
- lc面试准备:Reverse Linked List II
1 题目 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1 ...
- 【LeetCode练习题】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. F ...
- 反转链表 Reverse Linked List
2018-09-11 22:58:29 一.Reverse Linked List 问题描述: 问题求解: 解法一:Iteratively,不断执行插入操作. public ListNode reve ...
- leetcode -day30 Reverse Linked List II
1. Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one- ...
- LeetCode解题报告—— Reverse Linked List II & Restore IP Addresses & Unique Binary Search Trees II
1. Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass ...
随机推荐
- Swift笔记3
赋值运算符" = " let (x,y) =(10,45) var str = "luo" + "shaui" //会得到luoshu ...
- Linux下安装Wireshark
Linux下安装Wireshark wireshark依赖于libpcap,所以如果系统中未安装libpcap,也要将其一并安装 一.下载源码 源码文件 wireshark-x.x.x.tar.gz ...
- linux里的bootproto的none,static,dhcp有什么区别
这个是网络配置参数:BOOTPROTO=static 静态IP BOOTPROTO=dhcp 动态IP BOOTPROTO=none 无(不指定)通常情况下是dhcp或者static,通过指定方式 ...
- Oracle EBS-SQL (BOM-13):检查未定义库存分的物料类.sql
select distinct msi.segment1 编码 , msi.description 描述 , msi.primary_ ...
- WPS Office手机版调用接口代码指导帖之一(Android)
经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...
- JavaEE Tutorials (22) - 事务
22.1Java EE应用中的事务35222.2什么是事务35322.3容器托管事务353 22.3.1事务属性354 22.3.2回滚容器托管事务357 22.3.3同步会话bean的实例变量357 ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- Keil 中的预处理命令const
在keil中,宏定义是一个重要内容.无参数的宏作为常量,而带参数的宏则可以提供比函数更高的调用效率.但预处理只是进行简单的文本代替,而不做语法检查,所以会存在一些问题. 例如:#define BUFS ...
- chartControl 饼状图小Demo
Short Description The Pie Chart is represented by the Pie3DSeriesView object, which belongs to P ...
- ChartControl一个小Demo
我X轴设置的是时间,类型是DatetimeY轴设置的是数量,类型是Numerical当日期不一样时显示曲线正常,但是如果是同一天的话就成了下面的效果 怎么做才能让全部是同一天的时候显示小时为单位的曲线 ...