• 基础链表翻转操作


    一、单链表翻转操作

             对于带头结点的单链表基本构造如下,它有两种的翻转操作

    typedef int ElementType; 
    typedef struct LNode *PtrToLNode;
    typedef PtrToLNode Position;
    typedef PtrToLNode List;
    struct LNode {
        ElementType Data;
        PtrToLNode Next;
    };

    将a1到an元素再依次以头插入的方式生成链表,实现链表reverse

     

    List L;
     
    /* L为带头结点链表, reverse头结点插入实现 */
    List Reverse1(List L)
    { 
      
    /* 头结点指向NULL, 再将后续节点头依次插入 */ Position p; /* 连接后续节点指针 */ Position cur; /* 当前工作指针 */ p = L->Next; /* 指向后续链表 */ cur = p; L->Next = NULL; /* 头结点分离 */ while ( p!=NULL ) /* 依次向下移动,直到为NULL */ { p = p->Next; /* 指向下一节点 */ /* 将当前节点插入L */ cur->Next = L->Next; L->Next = cur; cur = p; /* 移动到下个节点 */ } return L; }

    /* 链表翻转,各节点依次反转  */ 
    List Reverse2(List L)
    {   /* 使用3个指针指向前、中、后三个节点 */
        Position pre;
        Position cur;        /* 当前工作节点 */
        Position rear; 
        cur = L->Next;
        rear = cur->Next;
        
        cur->Next = NULL;       /* 初始操作 将第一个节点变为尾节点 */
        /* rear指向后节点,当rear==NULL,p则为最后节点 */
        while( rear!= NULL ) 
        {   /* 遍历处理 */ 
            pre = cur;       /* 指针依次后移 */
            cur = rear;
            rear = rear->Next;    
                cur->Next = pre;     /* 链表节点翻转 */ 
        } 
        L->Next = cur;           /* 头节点连接到翻转后的链表节点 */
        
        return L;
    }

    图片来自网络

  • 相关阅读:
    将WinServers2019打造成家用系统
    WindowsServers2019上手体验
    【代码模板】不存在的NOIP2017
    NOIP2018初赛翻车总结
    【初赛】各种排序算法总结
    【Luogu1996】约瑟夫问题(模拟,解法汇总)
    【初赛】NOIP2018程序模板
    MongoDB
    非关系型数据库----MongoDB
    用Python来操作redis 以及在Django中使用redis
  • 原文地址:https://www.cnblogs.com/justLittleStar/p/10390536.html
Copyright © 2020-2023  润新知