C语言数据结构旋转链表的实现

C语言数据结构旋转链表的实现

1. 什么是旋转链表

旋转链表是一种特殊的链表,其特点是将链表的最后一个节点移动到最前面,形成一个环形链表的效果。比如下面这个链表:

1 -> 2 -> 3 -> 4 -> 5

经过一次旋转之后变成了:

5 -> 1 -> 2 -> 3 -> 4

2. 实现思路

旋转链表的实现思路比较简单,主要可以分为以下几步:

  1. 找到链表最后一个节点,并将其与头节点相连,形成一个环形链表。
  2. 找到新的链表尾节点(旋转后的头节点),断开环形链表,形成新的链表。

3. 实现代码

下面是旋转链表的C语言实现代码:

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

struct ListNode* rotateRight(struct ListNode* head, int k) {
    struct ListNode *p, *q;
    int len = 0;
    p = q = head;

    // 计算链表长度
    while (p) {
        len++;
        p = p->next;
    }

    // 链表为空或长度为1,直接返回原链表
    if (len == 0 || len == 1) {
        return head;
    }

    // 计算旋转后的头节点位置
    k = k % len;
    if (k == 0) {
        return head;
    }

    // 找到旋转后的头节点和尾节点
    for (int i = 1; i <= k; i++) {
        q = q->next;
    }
    p = head;
    while (q->next != NULL) {
        p = p->next;
        q = q->next;
    }

    // 断开环形链表,形成新的链表
    q->next = head;
    head = p->next;
    p->next = NULL;
    return head;
}

4. 示例说明

示例一:

给定链表: 1->2->3->4->5->NULL,k = 2
旋转后的链表: 4->5->1->2->3->NULL

示例二:

给定链表: 0->1->2->NULL,k = 4
旋转后的链表: 2->0->1->NULL

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数据结构旋转链表的实现 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 4种非常实用的python内置数据结构

    下面是关于4种非常实用的Python内置数据结构的详细讲解。 1. List(列表) 列表是Python中最常用的数据结构之一。它可以用来存储有序的数据集合,并且可以通过索引访问其中的元素。 创建列表 要创建一个列表,可以使用方括号[]将元素括起来,用逗号,分隔。例如: fruits = [‘apple’, ‘banana’, ‘orange’] 访问列表元…

    数据结构 2023年5月17日
    00
  • 数据结构C语言链表的实现介绍

    数据结构C语言链表的实现介绍 1. 什么是链表? 链表是一种常见的数据结构,它由一系列的节点(Node)通过链接(Link)组成,每个节点包含两个部分:数据域(Data)和指针(Pointer),数据域用来存储数据,指针用来链接下一个节点。链表最重要的优点就是支持动态扩展,占用内存比较灵活,相比于数组,链表在增加和删除元素时更加高效。 2. 链表的实现 链表…

    数据结构 2023年5月17日
    00
  • Java红黑树的数据结构与算法解析

    Java红黑树的数据结构与算法解析 红黑树简介 红黑树是一种平衡二叉搜索树,其中的每个节点上都有一个黑色或红色的标记,并且满足以下性质: 根节点是黑色的; 叶子节点是黑色的空节点(NULL); 如果一个节点是红色的,则其子节点必须是黑色的; 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点; 新插入的节点默认是红色的。 具体来说,只有在删除或者某…

    数据结构 2023年5月17日
    00
  • C++数据结构之搜索二叉树的实现

    C++数据结构之搜索二叉树的实现 搜索二叉树(Binary Search Tree, BST)是一种常见的数据结构,它支持快速地查找、插入和删除元素。本文将详细讲述如何用C++实现搜索二叉树。 一、搜索二叉树的定义 搜索二叉树是一种二叉树,它满足以下性质: 对于任意一个节点,其左子树中的所有节点都小于它,其右子树中的所有节点都大于它; 每个节点的左右子树也都…

    数据结构 2023年5月17日
    00
  • python数据结构树和二叉树简介

    下面是关于“Python数据结构树和二叉树简介”的详细攻略。 一、树的概念 树(Tree)是一种非常重要的数据结构,它是由n(n>0)个有限节点组成一个具有层次关系的集合。其中一个节点被称作根节点,它没有父节点;除根节点外,其他节点都有且只有一个父节点;每个节点可以有0个或多个子节点。一棵树的深度为树中层次最大的节点层数,根节点层次为1。 二、二叉树的…

    数据结构 2023年5月17日
    00
  • 设要采用CRC编码传送的数据信息x=1001,当生成多项式为G(x)=1101时,请写出它的循环校验码。若接收方收到的数据信息x’ =1101,说明如何定位错误并纠正错误

    题目:设要采用CRC编码传送的数据信息x=1001,当生成多项式为G(x)=1101时,请写出它的循环校验码。若接收方收到的数据信息x’ =1101,说明如何定位错误并纠正错误 根据题目描述,需要采用CRC编码对数据信息x=1001进行编码,生成多项式为G(x)=1101。下面是计算循环冗余校验码的步骤:1.首先将数据信息x乘以x的次数,使得它的位数与G(x…

    算法与数据结构 2023年4月18日
    00
  • 带你了解Java数据结构和算法之2-3-4树

    带你了解Java数据结构和算法之2-3-4树 1. 什么是2-3-4树 2-3-4树是一种自平衡二叉查找树,也叫B树的一种,它可以保持树的平衡,使得每个节点的左右子树高度差最多为1。在2-3-4树中,每个节点可以包含2个、3个或4个子节点,这也是其名称的来源。2-3-4树是B树的特殊形式,通常用于内存储存结构。 2. 2-3-4树的特点 2-3-4树的特点如…

    数据结构 2023年5月17日
    00
  • python数据结构之二叉树的统计与转换实例

    下面是针对“python数据结构之二叉树的统计与转换实例”的详细讲解攻略: 什么是二叉树 二叉树指的是一种树状结构,具有如下特点: 每个节点最多有两个子节点,分别为左子节点和右子节点 左子节点的值比父节点小,右子节点的值比父节点大 二叉树可以是空树,也可以是非空树。 二叉树的遍历 在对二叉树进行操作时,需要对其节点进行遍历。二叉树的遍历方式一般有以下三种: …

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部