链表就地逆置

作者: 飞白非白 | 来源:发表于2018-12-04 23:26 被阅读0次
1.
// 算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,
// 再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成
// 为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。

void converse(LinkList *head)
{
    LinkList *p,*q;
    p=head->next;
    head->next=NULL;
    while(p)
    {
        /*向后挪动一个位置*/
        q=p;
        p=p->next;
        
        /*头插*/
        q->next=head->next;
        head->next=q;
    }
}

2.
// 算法思想:先假定有一个函数,可以将以head为头
// 结点的单链表逆序,并返回新的头结点。利用这个
// 函数对问题进行求解:将链表分为当前表头结点和
// 其余部分,递归的过程就是,先将表头结点从链表
// 中拆出来,然后对其余部分进行逆序,最后将当前
// 的表头结点链接到逆序链表的尾部。递归的终止条
// 件就是链表只剩一个节点时,直接返回这个节点


ListNode *reverse(ListNode *head)
{
    if(head==NULL || head->next ==NULL)
        return head;
 
    /*递归*/
    ListNode* headOfReverse = reverse(head->next);
    // cout<<head->next<<" "<<headOfReverse<<endl;
 
     /*回溯:将当前表头结点链接到逆序链表的尾部*/
     headOfReverse->next = head;
     head->next = NULL;
     return headOfReverse;
}



相关文章

  • 链表就地逆置

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 将链表L就地逆置,即利用原表各结点的空间实现逆置

    一、题目 将链表L就地逆置,即利用原表各结点的空间实现逆置。 二、思路 在链表的第二个元素开始执行逆置,因为如果链...

  • 王道数据结构练习

    练习2.5 //试编写算法将带头结点的单链表就地逆置#include #include #include u...

  • 1.链表

    主要内容 包含题目: 链表基础知识: 上页的答案: 题目 例1 链表逆序 206 easy 方法一 就地逆置法 方...

  • 单链表就地转置

    试写一道算法,实现单链表的就地逆置(反转),即利用原表的存储空间将线性表(a1,a2,⋯an)逆置(反转)为(an...

  • 单向链表反转算法

    常用的4种: 迭代反转法 递归反转法 头插法 就地逆置法 1 迭代反转法 从当前链表的首元节点开始,一直遍历至链表...

  • 链表逆置C语言完整代码

    链表逆置C语言完整代码

  • 链表的逆置(又称反转)

    转自链表的逆置(又称反转)

  • 链表-链表逆置

    给定一根链表,将链表进行逆置 eg:1->2->3->4->5逆置后:5->4->3->2->1 这个题目如果直接...

网友评论

    本文标题:链表就地逆置

    本文链接:https://www.haomeiwen.com/subject/fjybcqtx.html