当前位置: 首页 > 后端技术 > Java

LeetCode-092-ReverseLinkedListII

时间:2023-04-01 16:09:21 Java

ReverseLinkedListII题目描述:给你单链表的头指针head和两个整数left和right,其中left<=right。请将链表节点从左到右反转,并返回反转后的链表。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:使用栈首先,如果head为null或者head只有一个节点,则直接返回head。否则,声明一个新的头节点newHead,声明一个栈reverseNodes把节点放在左右位置之间(倒序),具体过程如下:遍历head中的节点;一次将左前节点放在新链表中;将left和right之间的节点先入栈reverseNodes;使用rightNode记录右位置后节点的位置;最后,将栈reverseNodes中的节点一次性放入新链表中,然后将rightNode放入新链表的尾部。最后返回newHead.next就是反向链表。importcom.kaesar.leetcode.ListNode;importjava.util.Stack;publicclassLeetCode_092{publicstaticListNodereverseBetween(ListNodehead,intleft,intright){if(head==null||head.next==null){返回头;}//声明一个新的头节点ListNodenewHead=newListNode(-1);ListNodeleftNode=newHead,rightNode=head;//记录左右位置是否传过booleanfindLeft=false,findRight=false;//将左右之间的节点放入栈中StackreverseNodes=newStack<>();整数计数=1;while(head!=null){if(findLeft&&findRight){break;}if(findLeft){if(count==right){reverseNodes.add(head);rightNode=head.next;休息;}else{reverseNodes.add(head);head=head.next;}}else{if(count==left){findLeft=true;reverseNodes.add(头);if(count==right){rightNode=head.next;找到正确的=真;休息;}}else{leftNode.next=head;leftNode=leftNode.next;}head=head.next;}计数++;}//最后将栈中的节点倒序放入新列表while(!reverseNodes.isEmpty()){leftNode.next=reverseNodes.pop();leftNode=leftNode.next;}leftNode.next=rightNode;返回newHead.next;}publicstaticvoidmain(String[]args){ListNodehead=newListNode(3);head.next=newListNode(5);ListNoderesult=reverseBetween(head,1,2);而(结果!=null){System.out.print(result.val+"");结果=结果.下一个;}}}【每日留言】起初,我们只有梦想和毫无根据的自信,但一切都从这里开始