题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

/**

  • 关键思路:新的头结点 newNode, 新的头结点的标杆pointHead(方便最后返回结果)。 链表反转的时候反转前的节点 newHeadCur.
    利用List,反转的时候从尾部读取,不用反转的时候从头部读取。 */

import java.util.*;

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

public class Solution {

public ListNode reverseKGroup (ListNode head, int k) {
    // write code here
    List<ListNode> listNodes = new ArrayList<>();
    ListNode tempHead = head;

    ListNode newHead = new ListNode(0);
    // 记住起始位置
    ListNode pointHead = newHead;
    // 记录最后一个不为空的节点
    ListNode newHeadCur = null;

    while (head != null) {
        listNodes.add(head);
        head = head.next;
        if (listNodes.size() == k) {
            while (!listNodes.isEmpty()) {
                ListNode stackNode = listNodes.remove(listNodes.size() - 1);
                stackNode.next = null;
                newHeadCur = stackNode;
                newHead.next = stackNode;
                newHead = newHead.next;
            }
        }
    }
    if (pointHead.next == null) {
        return tempHead;
    }
    if (!listNodes.isEmpty()) {
        newHeadCur.next = listNodes.get(0);
    }
    return pointHead.next;
}


public static void main(String[] args) {
    Solution solution = new Solution();
    ListNode listNode1 = new ListNode(1);
    ListNode listNode2 = new ListNode(2);
    ListNode listNode3 = new ListNode(3);
    listNode1.next = listNode2;
    listNode2.next = listNode3;

    ListNode resNode = solution.reverseKGroup(listNode1, 2);
    System.out.println(resNode.val);
}

}

全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务