LeetCode092 Reverse Linked List II
来源:互联网 发布:淘宝客sina 编辑:程序博客网 时间:2024/04/19 21:08
详细见:leetcode.com/problems/reverse-linked-list-ii
Java Solution: github
package leetcode;/* * 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->NULL, m = 2 and n = 4,return 1->4->3->2->5->NULL.Note:Given m, n satisfy the following condition:1 ≤ m ≤ n ≤ length of list. */import tools.ListNode辅助.ListNode;;public class P092_ReverseLinkedListII {public static void main(String[] args) {ListNode head = tools.ListNode辅助.A_一维生成器(new int[] {});ListNode ans = new Solution().reverseBetween(head, 1, 1);tools.ListNode辅助.B_打印链表(ans);}/* * 题目非常容易,一次AC,好爽 * 1 ms */static class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (m >= n) { return head; } ListNode tra = head, one_last = null, two_first = null, two_last = null, three_first = null, save_tra_next = null; int count = 1; while (tra != null) { save_tra_next = tra.next; if (count == m - 1) { one_last = tra; } else if (count == m) { two_first = tra; two_last = tra; } else if (count == n + 1) { three_first = tra; } else if (count > m && count <= n) { tra.next = two_first; two_first = tra; } tra = save_tra_next; count ++; } if (one_last != null) { one_last.next = two_first; } if (two_last != null) { two_last.next = three_first; } if (one_last == null) { return two_first; } return head; }}}
C Solution: github
/* url: leetcode.com/problems/reverse-linked-list-ii AC 0ms 73.39%*/#include <stdio.h>#include <stdlib.h>typedef struct ListNode sln;typedef struct ListNode * pln;struct ListNode { int val; struct ListNode * next;};pln convert_int_to_ListNode(int * arr, int n) { pln head = NULL; pln travel = NULL; pln temp = NULL; int i = 0; if (n == 0 || n < 0) return NULL; travel = (pln) malloc(sizeof(sln)); travel->val = *(arr + 0); travel->next = NULL; head = travel; for (i = 1; i < n; i ++) { temp = (pln) malloc(sizeof(sln)); temp->val = *(arr + i); temp->next = NULL; travel->next = temp; travel = travel->next; } return head;}void free_ListNode(struct ListNode * l) { struct ListNode * l1 = l, * l2 = l; if (l == NULL) return; while (l1 != NULL) { l2 = l2->next; free(l1); l1 = l2; }}void print_ListNode(pln l) { while (l != NULL) { printf("%d ", l->val); l = l->next; } printf("\r\n");}pln reverseBetween(pln h, int m, int n) { int i = 1; pln t = h, s = NULL, p = NULL; pln h1 = NULL, h2 = NULL; pln e1 = NULL, e2 = NULL; while (t != NULL) { s = t->next; if (i == m-1) e1 = t; if (i == n+1) { e2 = t; break; } if (i == m) h1 = t; if (i == n) h2 = t; if (i > m && i <= n) { t->next = p; } p = t; t = s; i ++; } if (e1 != NULL) e1->next = h2; if (h1 != NULL) h1->next = e2; return m == 1 ? h2 : h;}int main() { /* 1, 2, 3, 4, 5, 6, 7, 8, 9 1, 2 1, 1 2, 4 */ int a[] = {1}; pln h = convert_int_to_ListNode(a, 1); pln ans = reverseBetween(h, 1, 1); print_ListNode(ans); return 0; }
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/reverse-linked-list-ii @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月23日 @details: Solution: 46ms 49.65%'''class ListNode(object): def __init__(self, x): self.val = x self.next = None def __str__(self, *args, **kwargs): return str(self.val)def con(l): n = [ListNode(v) for v in l] for i in range(len(l)-1): n[i].next = n[i+1] return n[0]def pri(d): print("=====================") while d != None: print(d.val) d = d.next print("=====================")class Solution(object): def reverseBetween(self, h, m, n): """ :type h: ListNode :type m: int :type n: int :rtype: ListNode """ t, d, p = 1, h, None h1, h2, e1, e2 = None, None, None, None while d != None: if t == m-1: e1=d if t == m: h1=d if t == n: h2=d if t == n+1: e2=d break s = d.next if t >= m: d.next=p d, t, p = s, t+1, d if e1 != None: e1.next = h2 if h1 != None: h1.next = e2 if m == 1: return h2 return h if __name__ == "__main__": h = con([1, 2, 3, 4, 5]) a = Solution().reverseBetween(h, 1, 5) pri(a)
0 0
- LeetCode092 Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- 对于Http的简单理解
- 聊一聊Srevlet ①
- 三十八、SpringBoot配置属性之Security
- LeetCode091 Decode Ways
- MySQL-联结表
- LeetCode092 Reverse Linked List II
- (Part1 ROS初探)
- NAND flash简单应用
- Spring基础之helloworld
- 构造函数与析构函数
- 关于spark的mllib学习总结(Java版)
- JDBC2和JSP初步--4月23号学习总结
- XMU 1614 刘备闯三国之三顾茅庐(二) 【逆向思维+二维并查集】
- C语言求一个序列的字典序排序