`
holoblog
  • 浏览: 1249629 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19333
文章分类
社区版块
存档分类
最新评论

逆转链表

 
阅读更多

每K个元素逆转一次。

这段代码是从某节点开始逆转K个

ListNode* Reverse(ListNode* head,ListNode** tail,int count)
{
ListNode * pre = NULL;
ListNode * p = head;
ListNode * q = head->next;
int num = count;
if(q == NULL)
return p;
if(count <= 1)
return p;
while(p&& count--)
{
p->next = pre;
pre = p;
p = q;
if(q != NULL)
q = q->next;
else
break;
}
if(count == 0 && !p || count == -1)
{
//complete reverse
head->next = p;
*tail = head;
head = pre;
return pre;

}
else
{
//reverse back
*tail =head;
head = pre;
head=Reverse(head,tail,num-count);
return head;
}

}

//真正的逆转函数

ListNode* ReverseK(ListNode* head, int count)
{

ListNode* pre=NULL;
ListNode* p = head;
ListNode* q = head->next;
ListNode* tail = NULL;
ListNode* newHead = Reverse(head,&tail,count);

int num = count;
tail = head;
head = head->next;
ListNode* newTail = tail;
while(head)
{

head = Reverse(head,&tail,count);
newTail->next = head;
head = tail->next;
newTail = tail;
tail = tail->next;

}
return newHead;
}

分享到:
评论

相关推荐

    单向链表逆转单向链表逆转单向链表逆转

    例如,在数据库中,链表可以用于存储大量的数据,逆转链表可以用于快速地查找和插入数据。在网络传输中,链表可以用于存储数据包,逆转链表可以用于快速地传输数据。 链表的优缺 链表有很多优点,例如: * 动态...

    逆转单向链表(有7种方法)

    在编程中,经常需要对链表进行各种操作,其中之一就是逆转链表。逆转链表的操作可以改变链表中节点的顺序,使得原本的第一个节点变为最后一个,最后一个节点变为第一个。在本主题中,我们将探讨7种不同的方法来实现...

    C语言实现的一个单向链表逆转

    接下来,我们定义逆转链表的递归函数。这个函数接收链表的头节点和前一个节点作为参数。在第一次调用时,前一个节点为NULL,因为初始时没有前一个节点。递归函数的核心思路是:如果链表不为空,就递归处理下一个节点...

    逆转线性单链表.doc

    2. **逆转链表函数**:`converse` 是一个模板函数,用于逆转链表。它接受一个类型 `T` 的链表头节点作为参数。函数内部首先检查链表是否为空(即 `head == NULL`),如果为空则直接返回,无需逆转。 - 设定三个...

    逆转一个链表

    在本文中,我们将深入探讨“逆转一个链表”的知识点,包括其实现方法、算法思路以及代码示例。 ### 链表逆转的原理 链表的逆转是指将链表中的元素顺序颠倒过来。例如,对于一个单向链表1 -&gt; 2 -&gt; 3 -&gt; 4,逆转后...

    单链表的创建于逆转

    单链表是一种基础的数据结构,...而逆转链表是一个经典的算法问题,经常出现在面试和编程竞赛中,对提高解决问题的能力非常有帮助。在实际项目中,单链表也被广泛应用于各种场景,例如在实现队列、栈或者自定义容器时。

    使一个循环单链表逆转

    在实际操作中,你可以创建一个循环单链表,插入一些节点,然后调用`reverse()`方法逆转链表,最后打印出逆转前后的链表,以验证逆转操作的正确性。 这个实验涵盖了链表数据结构、模板编程、动态内存管理和指针操作...

    数据结构第3章链表.pdf

    例如,迭代方法常用于统计节点数量、查找特定值的节点、插入或删除节点,以及逆转链表。递归方法通常用于解决链表中的某些特定问题,如计算节点值的总和或平均值。 此外,链表还被应用于多项式的表示。一元多项式...

    利用C编程编写链表逆转

    该程序利用C语言编程,主要用到指针建立链表并将链表逆转

    吉林大学数据结构与算法题目集

    吉林大学提供的这个题目集涵盖了三个核心主题:逆转链表、求有先修条件课程的最少学期数以及无序树的直径。接下来,我们将深入探讨这三个知识点。 首先,让我们来看看“逆转链表”。链表是一种线性数据结构,其元素...

    03016202万玥汝第一次实验报告_单链表逆转_单链表后插入新节点_删除结点_查找结点_

    在本实验中,我们探讨了单链表的几个关键操作:逆转链表、在指定位置后插入新节点、删除特定节点以及查找节点。 首先,让我们深入理解单链表逆转的过程。逆转链表的算法涉及到改变每个节点的指针方向,使其从原本...

    链表的逆转的实现(c++语言)

    链表逆转问题的c++语言实现方法,比较简单

    借助栈将一个带头结点的单链表倒置

    在算法的时间复杂度方面,由于两次遍历了链表,并对每个节点执行了入栈和出栈操作,所以总体时间复杂度为O(n),n为链表的长度。空间复杂度方面,由于使用了一个额外的栈来存储链表的元素,其空间复杂度也为O(n)。 #...

    PTA习题:数据结构与算法题目集1

    逆转链表意味着将原来的前后关系颠倒,使原链表的最后一个节点成为新链表的第一个节点,依次类推。实现这个功能通常采用迭代或递归的方式,迭代方法需要三个指针,分别用于前一个节点、当前节点和下一个节点;递归...

    纯C语言单链表的逆转,前驱插入,后驱插入,排序(适用于节点数据大,避免对数据拷贝的排序,可以对节点数据较大的程序提升性能)

    2. **链表逆转**:逆转链表是常见的链表操作,通过改变节点间的指向关系来实现。基本步骤是遍历链表,将当前节点的next指针指向前一个节点,最后将头指针指向原来的尾节点。这是一个O(n)时间复杂度的操作,不涉及...

    单向链表的逆转-详细讲解

    总结来说,逆转单向链表主要通过维护三个指针来实现:一个用于原链表,一个用于新链表,一个作为临时存储。通过改变指针的指向,我们可以将链表的顺序反转,从而实现逆转操作。这个过程不需要额外的内存空间,仅通过...

    数据结构算法背诵版.doc

    3. **逆转线性链表**:逆转链表的常用方法是通过三个指针,p指向当前节点,q指向前一个节点,r指向下一个节点。在逆转过程中,p和q不断前进,直到p到达链表末尾,此时链表已经逆转。 4. **复制线性链表(递归)**:...

    数据结构算法背诵版1

    数据结构和算法是计算机科学的基础,对于理解和优化程序性能至...例如,逆转链表和数组的操作都是O(n)的时间复杂度,而二叉树的遍历也都在O(n)内,其中n是节点数量。在处理大量数据时,这些算法的效率就显得尤为重要。

    实验报告定义与作用.pdf

    逆转链表的基本思想是创建一个新的头节点,通过反向遍历原链表,将每个节点的next指针指向前一个节点,最后更新头节点。 8. **测试数据与输出**:实验报告中给出了测试数据,如输入3,1,2,期望的输出为2,1,3。这...

Global site tag (gtag.js) - Google Analytics