给你单链表的头指针 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; } }