首页 > 其他分享 >旋转链表

旋转链表

时间:2024-09-15 22:13:01浏览次数:1  
标签:Node q1 q2 next 链表 旋转

旋转链表

开头:
对于链表的建立已经熟悉,那我们现在讲讲旋转链表的如何实现,当然旋转链表的建立是在已经掌握普通链表的基础上讲解。
正文:
旋转链表,顾名思义就是让链表“动起来”。即:使链表尾部最后的结点转到链表首部的位置。假设已经建立好一条6个结点的链表,它的初始状态如下图:

我们让他旋转两次就变成了这样,其过程是这样的,先让103到首部,然后再让22到首部,这样就是旋转两次后的结果。

如果我们让其旋转 k次,$k = 2*10^{12}$,最后的结果是怎样的呢?即,k mod n,其中n是链表结点的个数。
下面我们来看代码:
void Linklist::Revolve(int ck,int cmaxn)
 {
   count = 0;
   int count2 = 0;
   //创建四个指针
   Node *q1 = new Node;
   Node *q2 = new Node;
   Node *q3 = new Node;
   Node *q4 = new Node;
   q1 = first->next;
   q2 = first->next;  
   q3 = first->next;  
   q4 = first->next;

   int temp = cmaxn - ck;

	//q1的变化
   while(count != temp )
   {
     count++;
     q1 = q1->next;    

   }

	//q2的变化
   q2 = q1;
   while(count2 != ck - 1)
   {
     count2++;
     q2 = q2->next;
   }

	//q3的变化
   count = 0;  
   while(count != temp - 1)
   {
     count++;
     q3 = q3->next;
   }

   q3->next = q2->next;
   first->next = q1;
   q2->next = q4;  
 }

上图中的图就是代码中的4个指针。指针指向的变化如下图:

结语:
旋转链表就是通过旋转次数和节点个数的余数判断最终的位置。最多使用四个指针就可以实现旋转。如有错误,请指正,谢谢。

标签:Node,q1,q2,next,链表,旋转
From: https://www.cnblogs.com/zhzbubai/p/18415761

相关文章

  • C语言:链表
    链表是一种常见的基础数据结构,它由一系列节点(Node)组成。每个节点包含两部分:数据域(存储数据)和指针域(存储下一个节点的地址)。链表的特点是元素在内存中不一定连续存储,而是通过指针连接起来。以下是链表的一些基本特点:动态性:链表的长度可以动态变化,不需要在创建时指定大小。灵活......
  • opencv学习:图像旋转的两种方法,旋转后的图片进行模板匹配代码实现
    图像旋转在图像处理中,rotate和rot90是两种常见的图像旋转方法,它们在功能和使用上有一些区别。下面我将分别介绍这两种方法,并解释它们的主要区别rot90 方法rot90方法是NumPy提供的一种数组旋转函数,它主要用于对二维数组(如图像)进行90度的旋转。这个方法比较简单,只支持9......
  • Day4||24.两两交换链表中的节点|19.删除链表的倒数第n个结点|面试题:链表相交|142.环形
    24.两两交换链表中的节点题目:24.两两交换链表中的节点-力扣(LeetCode)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。图解思路首先,虚拟头结点挺方便链表进行增删改操作的。本题操作用到三......
  • 链表的快速排序(C/C++实现)
    一、前言大家在做需要排名的项目的时候,需要把各种数据从高到低排序。如果用的快速排序的话,处理数组是十分简单的。因为数组的存储空间的连续的,可以通过下标就可以简单的实现。但如果是链表的话,内存地址是随机分配的,不能像数组那样通过下标就直接实现。所以在这里给大家介绍......
  • 【JavaScript】LeetCode:707设计链表
    文章目录题目内容题目分析(1)获取第n个节点的值(2)头部插入节点(3)尾部插入节点(4)第n个节点前插入节点(5)删除第n个节点完整代码题目内容题目分析添加哨兵节点dummy。在第n个节点前插入节点时,应该找到第n-1个节点(即前一个节点),才能完成插入操作。在删除第n......
  • 4、循环单链表
    1、代码实现#include<stdio.h>#include<malloc.h>#include<assert.h>typedefintElemType;typedefstructNode{ElemTypedata;structNode*next;}Node,*PNode;typedefstructSCList{PNodefirst;PNodelast;intsize;}S......
  • WebGL系列教程七(二维及三维旋转、平移、缩放)
    目录1前言2二维2.1平移2.2旋转2.3缩放3三维3.1平移3.2旋转3.2.1绕XXX轴旋转3.2.2绕......
  • 19_删除链表的倒数第N个结点
    19_删除链表的倒数第N个结点【问题描述】给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例一:输入:head=[1],n=1输出:[]示例二:输入:head=[1,2],n=1输出:[1]提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=1001<=n<=sz【算......
  • 3、静态链表
    1、静态链表初始化head指向-1代表当前为空链表,pool指向下一个可用空间(在数组下标为2的空间),2指向3,3指向4,最后的指向0表示没有下一个节点,以此链接起来。2、实现代码#include<stdio.h>#include<malloc.h>#defineMAX_SIZE20typedefcharElemType;typedefstructS......
  • 链表
    1、创建链表-无头结点#include<stdio.h>#include<malloc.h>#include<assert.h>typedefintElemType;//定义链表typedefstructListNode{ElemTypedata;structListNode*next;}ListNode;typedefListNode*PList;//初始化链表,让链表一开始指向为空v......