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

    图片来自网络

  • 相关阅读:
    django中函数之间的关系
    文件文本的操作
    边框宽度 边框圆角 边框颜色
    nstimer实现倒计时
    用nstimer实现倒计时
    IOS常用宏定义
    计算文字的Size
    判断UITableView滚动是否到底
    设置Label行间距
    UIAlertView 提示弹窗
  • 原文地址:https://www.cnblogs.com/justLittleStar/p/10390536.html
Copyright © 2011-2022 走看看