反转链表

92.反转链表

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

  1. 构建一个虚拟节点,让它指向原链表的头节点。
  2. 设置两个指针,pre 指针指向以虚拟头节点为链表的头部位置,cur 指针指向原链表的头部位置。
  3. 让着两个指针向前移动,直到 pre 指向了第一个要反转的节点的前面那个节点,而 cur 指向了第一个要反转的节点。
  4. 开始指向翻转操作
  • 1)、设置临时变量 temp,temp 是 cur 的 next 位置,保存当前需要翻转节点的后面的节点,我们需要交换 temp 和 cur
  • 2)、让 cur 的 next 位置变成 temp 的下一个节点
  • 3)、让 temp 的 next 位置变成 cur
  • 4)、让 pre 的 next 位置变成 temp
class Solution {
	public ListNode reverseBetween(ListNode head, int left, int right) {
    	ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = dummy;
        ListNode cur = head;

    	for (int i = 0; i < left - 1; i++) {
        	pre = pre.next;
            cur = cur.next;
        }
        
        for (int i = 0; i < right - left; i++) {
        	ListNode temp = cur.next;
            cur.next = cur.next.next;
        	temp.next = pre.next;
            pre.next =temp;
        }
        return dummy.next;
    }
}
posted @ 2022-12-03 17:50  KksS-  阅读(320)  评论(0)    收藏  举报