单链表的逆置

单链表的逆置的实现:

(1)算法

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

link reverse(link x)
{
  if( NULL==x )
    return NULL;
 
  link t=NULL;
  link 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值