LeetCode 92 Reverse Linked List II(翻转链表II)(Linked List)(*)

来源:互联网 发布:淘宝固定悬浮导航 编辑:程序博客网 时间:2024/05/29 12:07

翻译

将一个链表中位置m和n的节点进行翻转。就地且一次通过。

例如
给定 1->2->3->4->5->NULL, m = 2 和n = 4,

返回 1->4->3->2->5->NULL.

备注:
给定的m和n满足以下条件:
1 <= m <= n <= 链表的长度

原文

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.

分析

C Plus Plus

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* reverseBetween(ListNode* head, int m, int n) {        ListNode *newHead = new ListNode(0);        newHead->next = head;        ListNode *c = newHead;        for (int i = 0; i < m - 1; i++) {            c = c->next;        }        ListNode *p = c->next;        for (int i = 0; i < n - m; i++) {            ListNode *t = p->next;            p->next = t->next;            t->next = c->next;            c->next = t;        }        return newHead->next;    }};

Java

updated at 2016/09/23
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    ListNode reverseBetween(ListNode head, int m, int n) {        ListNode newHead = new ListNode(0);        newHead.next = head;        ListNode c = newHead;        for (int i = 0; i < m - 1; i++) {            c = c.next;        }        ListNode p = c.next;        for (int i = 0; i < n - m; i++) {            ListNode tmp = p.next;            p.next = tmp.next;            tmp.next = c.next;            c.next = tmp;        }        return newHead.next;    }}
5 0
原创粉丝点击