题目:给你一个链表的头节点 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. 分隔链表
模拟即可
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;}
}