92. 反转链表 II

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

示例 1:

 

 

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

示例 2:

输入:head = [5], left = 1, right = 1
输出:[5]

 

解法:利用栈来实现

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode dummyNode = new ListNode(-1);

        dummyNode.next = head;

        ListNode pre = dummyNode;

        for(int i = 0;i< left -1;i++)
        {
            pre = pre.next;
        }

        ListNode cur = pre.next;

        Stack<ListNode> st = new Stack<ListNode>();

        ListNode next;
        for(int i = 0;i<=right-left;i++)
        {
            st.push(cur);
            cur = cur.next;
        }

        while (!st.isEmpty())
        {
            ListNode temp = st.pop();
            pre.next =temp;
            pre= pre.next;
        }
        pre.next = cur;
        return  dummyNode.next;
    }
}

 

posted @ 2021-06-17 09:43  kpwong  阅读(47)  评论(0编辑  收藏  举报