首页 > algorithm > 链表1(链表节点的交换)

链表1(链表节点的交换)

  今天遇见一个问题,就是链表排序的时候,节点如何交换。方法很多种,最优的一种:一个函数实现如何用一个指针参数,实现交换。看了好几遍才看懂,代码粘贴上,仔细的分析一下:
void swap_node(stu_t * p)
{
stu_t * tmp = p->next;
p->next = p->next->next;
tmp->next = p->next->next;
p->next->next = tmp;
return;
}

——>①——>②——>③——>④——

这是一个完整的链表,现在要交换②③,P指针指向①。

tmp
  ↘
——>①——>②——>③——>④——

声明一个临时变量tmp,使tmp指向②,此时tmp中存储着②的地址

tmp
  ↘
——>①   ②——>③——>④——
   |       ↑
   ———————

使①的next指向③

tmp       ____________
  ↘     |       ↓
——>①    ②   ③——>④——
    |       ↑
    ————————

使②的next指向④,此时②用tmp找到的,④是通过①找到

tmp        ______________
↘        |        ↓
——>①    ②<——③    ④——
    |        ↑
    ———————

最后,使③指向②,③用p->next找到,就是把③中的next的值,等于②的地址,②的地址存储在tmp中。

  1. Amarula 9月 2nd, 2012 @ 22:40 | #1

    Insights like this liven things up aronud here.

评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks