程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言鏈表逆序技巧

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;

  }

  算法都是一致,但順序不一樣,這直接點明了鏈表操作的核心——順序,鏈表的算法主要難在順序上。

  逆序操作中,要將一個指針指向前一個節點,中間必然斷開,這就需要兩個指針指向斷開處的一前一後。

  上面兩個程序都是這樣,不同在於指針移動的位置。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved