目录
- 题目
- 1- 思路
- 2- 实现
- ⭐92. 反转链表 II——题解思路
- 3- ACM实现
题目
- 原题连接:92. 反转链表 II
1- 思路
模式识别:翻转 给定 left 和 right 固定区间的链表 ——> ①虚拟头结点 + ②三个指针方式实现
2- 实现
⭐92. 反转链表 II——题解思路
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode pre = dummyHead;for(int i = 1 ; i < left;i++){pre = pre.next;}ListNode cur = pre.next;ListNode next = null;for(int i = 0 ; i < right - left;i++){next = cur.next;cur.next = next.next;next.next = pre.next;pre.next = next;}return dummyHead.next;}
}
3- ACM实现
public class reverse {static class ListNode{int val;ListNode next;ListNode(){}ListNode(int x){val = x;}}public static ListNode reverseList(ListNode head,int left,int right){ListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode pre = dummyHead;for(int i = 1 ; i < left;i++){pre = pre.next;}ListNode cur = pre.next;ListNode next =null;for(int i = 0 ; i < right-left;i++){next = cur.next;cur.next = next.next;next.next = pre.next;pre.next = next;}return dummyHead.next;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入链表长度");int n =sc.nextInt();ListNode head = null,tail = null;for(int i = 0 ; i < n;i++){ListNode newNode = new ListNode(sc.nextInt());if(head==null){head = newNode;tail = newNode;}else{tail.next = newNode;tail = newNode;}}System.out.println("输入第一个元素");int left = sc.nextInt();System.out.println("输入第二个元素");int right = sc.nextInt();ListNode forRes = reverseList(head,left,right);while(forRes!=null){System.out.print(forRes.val+" ");forRes = forRes.next;}}
}