61. 旋转链表 86. 分隔链表 |面试经典题

发布时间:2024年01月12日

题目:给你一个链表的头节点 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;
    }
}
文章来源:https://blog.csdn.net/weixin_44925329/article/details/135555631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。