题目:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
题目链接:61. 旋转链表
截断拼接即可
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null||k==0){
return head;
}
ListNode point=head;
int len=0;
while(point!=null){
len++;
point=point.next;
}
int offset =len-k%len;
if(offset==len){
return head;
}
int i=1;
ListNode before = head;
ListNode after=head;
while(i<offset){
after=after.next;
i++;
}
ListNode newhead=after.next;
ListNode point2=newhead;
after.next=null;
int num=k%len;
while(num>1){
point2=point2.next;
num--;
}
point2.next=before;
return newhead;
}
}
题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
题目链接:86. 分隔链表文章来源:https://www.toymoban.com/news/detail-813797.html
模拟即可文章来源地址https://www.toymoban.com/news/detail-813797.html
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode smlDummy = new ListNode(0), bigDummy = new ListNode(0);
ListNode sml = smlDummy, big = bigDummy;
while (head != null) {
if (head.val < x) {
sml.next = head;
sml = sml.next;
} else {
big.next = head;
big = big.next;
}
head = head.next;
}
sml.next = bigDummy.next;
big.next = null;
return smlDummy.next;
}
}
到了这里,关于61. 旋转链表 86. 分隔链表 |面试经典题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!