晃晃悠悠

isrobert

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  12 随笔 :: 0 文章 :: 34 评论 :: 0 Trackbacks
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(0)

随笔分类

随笔档案

文章档案

相册

收藏夹

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

思路和**一样,可能代码看上去有点照抄嫌疑,但是根据我的思考过程写的~ 望**勿怪,水平有限,大家多指正。
#include <iostream>
#include <stdio.h>

using namespace std;

struct st
{
 int a;
 st(int i){ a = i; }
 struct st* next;
};

void sort(struct st* &head)
{
 st* p = 0;//排序后的链表头
 st* p1 = head;//排序前的链表头
 st* p2 = p1;//在排序过程中,保存原始链表头
 for(;p2;)
 {
  p2 = p1->next;
  p1->next = p;
//以上2步,是将当前节点从链表中取出然后将指针反向指向
  p = p1;//将排序好的链表的头,给p
  p1 = p2;//将p1重新指向链表的首位置
 }
 head = p;//让head重新指向排序好的链表头
}

void print(struct st* p)
{
 for(;p;)
 {
  cout << p->a << endl;
  p = p->next;
 }
}
int main( void )
{
 st* head = new st(0);
 st* p = head;
 
 p->next = new st(1);
 p = p->next;
 p->next = new st(2);
 p = p->next;
 p->next = new st(3);
 p = p->next;
 p->next = 0;
 
 print(head);
 sort(head);
 cout << "----------------------" << endl;
 print(head);

 return 0;
}

//20070126=====================
可能这么说更好理解点:
实际上可以看作是2个list.,从原始list的head开始逐个取节点,然后向目的list的头的位置插入。
sort的循环中,前2句为取,后2句为插。

posted on 2007-01-25 20:31 isrobert 阅读(1556) 评论(1)  编辑 收藏

评论

# re: 20070125-单链表倒序算法 -------- 看到**的文章,自己想小试牛刀 2007-01-26 00:30 hpho
struct st* 
sort(struct st* tmp, struct st*& h){
     return tmp->next?
                sort(tmp->next, h)->next=tmp,
                 tmp->next=0,
                 tmp:
                 (h=tmp);
}

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]