题解 | #牛群的重新排列#

牛群的重新排列

https://www.nowcoder.com/practice/5183605e4ef147a5a1639ceedd447838

题目考察的知识点是:

本题主要考察链表和反转

题目解答方法的文字分析:

这道题可以用头插来做,也可以用栈来做,相比上一道要容易些,大致思路和上一个差不多;prev指向第一个翻转结点的前一个,end指向第一个翻转的结点,cur指向翻转的结点,next指向翻转结点的下一个结点,然后对第left到第right个的结点头插,最后在将头插的和未投插的结点连接起来

本题解析所用的编程语言:

java语言。

完整且正确的编程代码:

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @param left int整型
     * @param right int整型
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int left, int right) {
        // write code here
        ListNode newhead = new ListNode(-1);
        newhead.next = head;
        ListNode fast = head;
        ListNode slow = newhead;
        for (int i = 0; i < left - 1; i++) {
            slow = slow.next;
        }
        for (int i = 0; i < right; i++) {
            fast = fast.next;
        }
        slow.next = reverse(slow.next, fast);
        return newhead.next;
    }
    private ListNode reverse(ListNode head, ListNode end) {
        ListNode pre = end;
        ListNode cur = head;
        while (cur != end) {
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}
#题解#
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务