博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode OJ:Reverse Linked List II(反转链表II)
阅读量:6707 次
发布时间:2019-06-25

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

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.

 

大清早起来就被链表虐哭了啊, 看了下别人的,额原来可以这么简单,果然脑子还是转不过来的,实际上是很常见的一个题目,代码很简单,完全不用注释也可以的:

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) return NULL;13         ListNode * p = head;14         int i, j;15         for(i = 1; i < m; ++i){16             p = p->next;17         }18         ListNode * q = p;19         for(i = m; i < n; ++i){20             for(j = i; j < n; ++j){21                 q = q->next;22             }23             swap(p->val, q->val);24             n--;25             p = p->next;26             q = p;27         }28         return head;29     }30 };

注意一下那个swap, swap用的很巧妙。

之后有看到一个大神写出来的,也很简单,贴出来学习一个:

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         // Start typing your C/C++ solution below13         // DO NOT write int main() function14         if (head == NULL)15             return NULL;16             17         ListNode *q = NULL;18         ListNode *p = head;19         for(int i = 0; i < m - 1; i++)20         {21             q = p;22             p = p->next;23         }24         25         ListNode *end = p;26         ListNode *pPre = p;27         p = p->next;28         for(int i = m + 1; i <= n; i++)29         {30             ListNode *pNext = p->next;31             32             p->next = pPre;33             pPre = p;34             p = pNext;35         }36         37         end->next = p;38         if (q)39             q->next = pPre;40         else41             head = pPre;42         43         return head;44     }45 };

唉唉,经常遇到链表脑子就转不过来,这个还是要多练练啊。

下面贴一个java版本的,方法基本上和第一种差不多,熟悉一下用法:

1 /** 2  * Definition for singly-linked list. 3  * public class ListNode { 4  *     int val; 5  *     ListNode next; 6  *     ListNode(int x) { val = x; } 7  * } 8  */ 9 public class Solution {10     public ListNode reverseBetween(ListNode head, int m, int n) {11         int count = 1;12         ListNode helper = new ListNode(-1);13         helper.next = head;14         ListNode p = helper.next;15         ListNode pPre = helper;16         while(count != m){17             p = p.next;18             pPre = pPre.next;19             count++;20         }21         ListNode midPre = pPre;//第一个节点的位置22         ListNode tmp = null;23         while(count != n){24             tmp = p.next;25             p.next = pPre;26             pPre = p;27             p = tmp;28             count++;29         }30 //        ListNode mid2= p; // 指向第二个节点的位置31         tmp = p.next;32         p.next = pPre;33         midPre.next.next = tmp;34         midPre.next = p;35         return helper.next;36     }37 }

 

转载于:https://www.cnblogs.com/-wang-cheng/p/4874091.html

你可能感兴趣的文章
利用自定义IHttpModule来实现URL地址重写
查看>>
在网页上嵌入 PowerPoint 演示文稿
查看>>
javascript日期格式化函数,跟C#中的使用方法类似
查看>>
Android杂谈--Activity、Window、View的关系
查看>>
使用delphi 开发多层应用(十)安全访问服务器
查看>>
JavaScript计算字符串中每个字符出现的次数
查看>>
mvc中的ViewData用到webfrom中去
查看>>
[转载]java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法
查看>>
SKY IM-A800S 驱动下载
查看>>
应用程序 数据缓存
查看>>
TFS签入签出
查看>>
第二条:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)
查看>>
成长,没你想象的那么迫切
查看>>
ASP.NET Core 中文文档 第一章 入门
查看>>
jQuery入门(2)使用jQuery操作元素的属性与样式
查看>>
贴片电阻分类、阻值、功率、封装、尺寸
查看>>
Mqtt协议IOS端移植2
查看>>
【Eclipse】eclipse中设置tomcat启动时候的JVM参数
查看>>
10.查看npm安装信息和版本号
查看>>
国际化环境下系统架构演化
查看>>