C语言链表逆序技巧

来源:网络时间:2011-06-24 16:04:26

  简洁的做法是

  遍历链表,

  元素进栈,

  遍历的同时销毁原来的链表。

  元素出栈,

  建立新链表。

  高效的是,

  用指向链表结点指针的指针操作

  直接首尾交换指针值(两两进行)

  一般的是前插法

  实际上根本就不用插入,一次遍历就可以完成了。

  链表的逆序,必将涉及到两个以上指针,一般用三个指针,

  下面是一个人的程序:

  struct List1 *reverse(List1 *h) //h为链表的头指针

  {

  struct List1 *p,*v1,*v2;

  v2=h;

  v1=NULL;

  while( v2!=NULL ){

  p=v2->pNext;

  v2->pNext=v1;

  v1=v2;

  v2=p;

  }

  return v1;

  }

  另一个人的:

  struct IntNode* res(struct IntNode* h)

  {

  struct IntNode *s, *s1;

  s = h;

  h = NULL;

  while (s)

  {

  s1 = s;

  s = s->next;

  s1->next = h;

  h = s1;

  }

  return h;

  }

  算法都是一致,但顺序不一样,这直接点明了链表操作的核心——顺序,链表的算法主要难在顺序上。

  逆序操作中,要将一个指针指向前一个节点,中间必然断开,这就需要两个指针指向断开处的一前一后。

  上面两个程序都是这样,不同在于指针移动的位置。

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:9145908@qq.com
多特网友 2012-08-06 16:23:07 回复
非常感谢,终于看明白了!
多特网友 2012-04-18 14:23:12 回复
简明扼要,尤其最后那句逆序操作中,要将一个指针指向前一个节点,中间必然断开,这就需要两个指针指向断开处的一前一后。醍醐灌顶啊!!!
多特网友 2012-04-05 18:41:22 回复
现在学的数据结构,不会编程,一点也不会啊,想赶紧补上。。
多特网友 2012-03-09 21:57:04 回复
全局变量和局部变量
多特网友 2011-09-05 21:14:42 回复
get it!
多特网友 2011-09-05 21:14:42 回复
get it!
多特网友 2012-03-09 21:57:04 回复
全局变量和局部变量
多特网友 2012-04-05 18:41:22 回复
现在学的数据结构,不会编程,一点也不会啊,想赶紧补上。。
多特网友 2012-04-18 14:23:12 回复
简明扼要,尤其最后那句逆序操作中,要将一个指针指向前一个节点,中间必然断开,这就需要两个指针指向断开处的一前一后。醍醐灌顶啊!!!
多特网友 2012-08-06 16:23:07 回复
非常感谢,终于看明白了!