LeetCode 61 旋转链表

– 题目:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

– 思路:移动链表长度length个位置时,等于没有移动,所以用 k % length 算出真正要移动的次数,然后将后面 k % length 个节点整体移动到到前面即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* rotateRight(struct ListNode* head, int k){
    int last_part_length; //第一部分节点个数
    int first_part_length; //第二部分节点个数
    int length=0; //链表长度
    //求链表长度
    struct ListNode* temp=head;
    while(temp!=NULL){
        temp=temp->next;
        length++;
    }
    if(k==0 || length== 0){
        return head;
    }
    //求第一部分节点个数和第二部分节点个数
    last_part_length = k % length;
    first_part_length = length - last_part_length;
    if(last_part_length==0){
        return head;
    }
    
    struct ListNode* first_part_end=head;//第一部分的末节点
    struct ListNode* last_part_start=NULL;//第二部分的首节点
    struct ListNode* last_part_end=NULL;//第二部分的末节点
    
    for(int i=0;i<first_part_length-1;i++){
        first_part_end=first_part_end->next;
    }
    last_part_start=first_part_end->next;
    if(first_part_end!=NULL){
        first_part_end->next=NULL;
    }
    last_part_end=last_part_start;
    for(int j=0;j<last_part_length-1;j++){
        last_part_end=last_part_end->next;
    }
    last_part_end->next=head;
    return last_part_start;
}

网站:https://leetcode-cn.com/problemset/all/

  1. 旋转链表 √

树题:

  1. 二叉树的中序遍历

图题:

  1. 克隆图

Comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注