论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
逆置动态单链表

[科技论文网] http://www.scipapers.com    2007-12-01  

    逆置动态单链表

    一、一般动态单链表的逆置问题

    (1)算法

    struct linklist
    {
      int data;
      struct linklist *next;
    };

    linklist * reverse(linklist *p)
    {
      if( NULL==p)
        return NULL;
      
      linklist * t=NULL;
      linklist * r=NULL;

       y=x;  //(0)
      while(y!=NULL)
      {
        t = y->next;   //(1)
        y->next = r;   //(2)
        r = y;         //(3) 
        y = t;         //(4)
       }

      return r;     //返回逆置后的链表
    }

    (二)原理
    (0)(1)(2)(3)(4)分别对应以上程序的各序号
    第一次while循环
    -------------------------------------------
    (0) r=NULL, y=x

    r=NULL    

    a    --->    b     --->   c   --->  d --> NULL
     |(0)            
     y            

    -------------------------------------------
    (1) t =y->next

    r=NULL    

            a    --->    b     --->   c   --->  d --> NULL
             |(0)          | (1)  
             y             t 


    --------------------------------------------
    (2) y->next = r
                  
    a    --->  NULL            b     --->   c   --->  d --> NULL
    |(0)   (2)  |                   | (1)  
    y            r                t 
     
    ---------------------------------------------       
    (3) r = y    
              
    a    --->  NULL            b     --->   c   --->  d --> NULL
    |(0)   (2)                     | (1)  
    y                               t 
    |(3)
    r

    --------------------------------------------- 
    (4) y = t
                  
    a    --->  NULL            b     --->   c   --->  d --> NULL
    |(0)   (2)                     | (1)  
    |                                t 
    |(3)                            | (4)
    r                                y


    第二次while循环(并对上面进行整理)
    --------------------------------------------- 
    (1) t = y->next
                  
    a    --->  NULL            b     --->   c   --->  d --> NULL
    |                 |              |(1)
    r                y               t
                             
    --------------------------------------------- 
    (2) y->next = r
                  
    b  --->  a    --->  NULL         c   --->  d --> NULL
    |  (2)     |                            |(1)
    y          r                             t

    --------------------------------------------- 
    (3) r = y
                  
    b  --->  a    --->  NULL         c   --->  d --> NULL
    |  (2)                                  |(1)
    y                                        t
    |  (3)
    r

    --------------------------------------------- 
    (4) y = t
                  
    b  --->  a    --->  NULL         c   --->  d --> NULL
    |  (2)                                 |(1)
    |                                        t
    |  (3)                                 |(4)
    r                                        y


    第三个循环 (并对上面的进行整理)
    --------------------------------------------- 
    (1) t = y->next
                  
    b  --->  a    --->  NULL         c   --->  d --> NULL
    |                                       |          |(1)
    r                                       y           t

    以后的与第二次循环同, 最终可得:
                  
    d ---> c  ---> b  --->  a    --->  NULL
     

    二、带头节点的动态单链表的逆置

    p指向第一个结点,q指向p的后继结点,r指向q的后继结点

    void invert(head)
    linklist *head;
    {
    linklist *p,*q,*r;
    p=head;
    q=p->next;
    while(q!=NULL)
    {
    r=q->next; /* r用来保存q的后继结点的位子 */
    q->next=p; /* 逆置指针,也就是将p的后继结点q->next指向p*/
    p=q;        /* p向后移动一个位子,指向q原来指向的结点 */
    q=r;        /* 同时q也向后移动一个位子,指向r原来指向的结点 */
    }
    head->next=Null; /*原来的头结点的next指向Null*/
    head=p; /*p指向L的最后一个结点,现改为头结点*/
    }

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
逆置动态单链表
下面没有链接了     采用比特位运算改进的N皇后算法
最新论文
·[程序设计]逆置动态单链表
·[程序设计]采用比特位运算改进的N皇后算法
·[程序设计]快速排序C语言实现
·[程序设计]SHA1算法源代码
·[程序设计]利用二叉树结构的快速排序
·[程序设计]C语言有头结点链表的经典实现
·[程序设计]算法——动态规划法
·[程序设计]回溯法:子集树与排列树
·[程序设计]有序表的查找(折半查找)
·[程序设计]全排列问题(回溯求解)
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com