C语言链表逆序技巧

好多同学都在问我关于C语言链表逆序的知识,我回去查了查资料,达内培训总结了下面关于培训的相关知识,希望对大家有所帮助。
  简洁的做法是
  遍历链表,
  元素进栈,
  遍历的同时销毁原来的链表。
  元素出栈,
  建立新链表。
  高效的是,
  用指向链表结点指针的指针操作
  直接首尾交换指针值(两两进行)
  一般的是前插法
  实际上根本就不用插入,一次遍历就可以完成了。
  链表的逆序,必将涉及到两个以上指针,一般用三个指针,
  下面是一个人的程序:
  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;
  }
  算法都是一致,但顺序不一样,这直接点明了链表操作的核心——顺序,链表的算法主要难在顺序上。
  逆序操作中,要将一个指针指向前一个节点,中间必然断开,这就需要两个指针指向断开处的一前一后。
  上面两个程序都是这样,不同在于指针移动的位置。
  以上就是达内培训为大家总结的关于C语言链表逆序技巧的一些基本知识,在这里达内IT培训再次提醒大家在以后的学习和工作中我们一定要注意学会总结,总结不仅仅能够帮助我们学习,还能帮助更多的人。

                              来自:http://www.chinatarena.com/

posted @ 2013-04-23 16:50  wxp2xxx  阅读(420)  评论(0)    收藏  举报