leetcode92-Reverse Linked List II

题目

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

示例 1:

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

输出:[1,4,3,2,5]

分析

拿例子来说,我们可以找到left的前序结点pre,链表翻转可以等同于不断的把left后面的结点往pre结点后面进行插入

java 复制代码
public class LinkNode {
	int val;
	LinkNode next;

	public LinkNode(int data) {
		this.val = data;
		this.next = null;
	}
}
public class LinkList {
	LinkNode head;
	public LinkList() {
		this.head = null;
	}
	public LinkNode getHead() {
		return this.head;
	}
	//添加元素
	public void addNode(int data) {
		LinkNode node = new LinkNode(data);
		if (this.head == null) {
			this.head = node;
		} else {
			LinkNode cur = this.head;
			while(cur.next != null) {
				cur = cur.next;
			}
			cur.next = node;
		}
	}
	//正序打印
	public void print(LinkNode node) {
		while(node != null) {
			System.out.print(node.val);
			System.out.print(" ");
			node = node.next;
		}
		System.out.println();
	}
	public void partReverse(int left,int right) {
		LinkNode dummy = new LinkNode(-1);
		dummy.next = this.head;
		LinkNode pre = dummy;
		for(int i = 1;i<left;i++) {
			pre = pre.next;
		}
		int tmp = right - left;
		LinkNode cur = pre.next;
		while(tmp > 0 && pre != null) {
			if(cur != null && cur.next != null) {
				LinkNode p = cur.next;
				cur.next = p.next;
				p.next = pre.next;
				pre.next = p;
			}
			tmp--;
		}
		print(dummy.next);

	}
}
public class reverseLinkedListII {
	public static void main(String[] args) {
		LinkList list = new LinkList();
		list.addNode(1);
		list.addNode(2);
		list.addNode(3);
		list.addNode(4);
		list.addNode(5);
		list.partReverse(2,4);
	}
}
相关推荐
不倒翁玩偶6 小时前
IDEA导入新的SpringBoot项目没有启动按钮
java·spring boot·intellij-idea
静听山水6 小时前
Redis核心数据结构-ZSet
数据结构·redis
小小小米粒6 小时前
Maven Tools
java
铉铉这波能秀6 小时前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary
kali-Myon6 小时前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
我是咸鱼不闲呀6 小时前
力扣Hot100系列20(Java)——[动态规划]总结(下)( 单词拆分,最大递增子序列,乘积最大子数组 ,分割等和子集,最长有效括号)
java·leetcode·动态规划
唐梓航-求职中7 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
清水白石0087 小时前
深入解析 LRU 缓存:从 `@lru_cache` 到手动实现的完整指南
java·python·spring·缓存
Ll13045252987 小时前
Leetcode二叉树part4
算法·leetcode·职场和发展
Queenie_Charlie7 小时前
stars(树状数组)
数据结构·c++·树状数组