zoukankan      html  css  js  c++  java
  • 基础链表翻转操作

    一、单链表翻转操作

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

    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;
    }

    图片来自网络

  • 相关阅读:
    [转载]从零开始学习OpenGL ES之一 – 基本概念
    ios中陀螺仪CoreMotion的使用
    如何在IOS中使用3D UI – CALayer的透视投影
    cocos3d加载3Dmax模型到ios中
    cocos2d 坐标系统参考
    PAT 1029 Median
    PAT 1028 List Sorting
    Linux中的进程调度(二)
    LaTeX学习(一)
    搬家
  • 原文地址:https://www.cnblogs.com/justLittleStar/p/10390536.html
Copyright © 2011-2022 走看看