你说你会改变,但是你只是为了解决当时的冲突而讲的话。
给你一个链表头节点head和x,要求链表中所有小于x的节点都出现在大于或等于x的节点之前
例如:head = [1,4,3,2,5,2], x = 3;
输出:[1,2,2,4,3,5]
在合并两个链表的时候,是将两个链表合并成一个,拆分的时候,是将一个链表拆分成两个。这中间涉及了什么,你知道吗。
这道题的解题思路是使用两个链表,一个用来保存比x小的,一个用来保存比x大的,将原始链表遍历结束之后,小的那个链表的尾指针的next指向大的那个链表的虚拟头指针的next,这样就拼接起来整个链表了。文章来源:https://www.toymoban.com/news/detail-839264.html
代码如下:文章来源地址https://www.toymoban.com/news/detail-839264.html
class Solution {
/**
* 思想:
* 双指针,左指针指向数组最左侧的数据,右指针指向数组结尾
* 循环结束的出口是两个指针相遇,也就是说这个算法是两个指针的方向不一样
* 指针移动的条件是,如果左指针指向的数据对应的更高,就是height[left]<hight[right],左指针右移,反之右指针左移,这样可以保证面积更大
* @param height
* @return
*/
public int maxArea(int[] height) {
int left = 0;
int right = height.length - 1;
int maxArea = 0;
while (left < right){
int area = Math.min(height[left],height[right]) * (right - left);
maxArea = Math.max(maxArea,area); // 取最大的
if (height[left] < height[right]){
left++;
} else {
right--;
}
}
return maxArea;
}
}
到了这里,关于力扣刷题笔记-86 单链表的分解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!