單鏈表建立 輸出 逆轉 查詢

2021-06-22 05:04:41 字數 1427 閱讀 2339

鍊錶和陣列兩者的區別: 陣列是一塊連續的儲存空間,長度固定。鍊錶的儲存空間是可以不連續的,並且其長度不固定(動態),每個結點需保留鄰結點指標;資料查詢方面,陣列只需根據其序號就能直接找到,而鍊錶需要順序檢索查詢,效率是較低的;對於資料插入或刪除問題,鍊錶是更方便的,而陣列則需要進行較大的資料移動操作。

鍊錶擁有基本的就是結點,現定義如下結點結構:

typedef struct node

node,*pnode;

結點中包含結點資料和指向下一結點的指標。

(1)建立乙個單鏈表並輸出

這裡面涉及較多的就是malloc函式,為結點申請記憶體。注意和c++中的new()進行區別。

//建立乙個單鏈表

pnode createlist(type *val,int n)

head->data=-1;

head->next=null;

pnode p=head;

for(i=0;idata=val[i];

newnode->next=null;

p->next=newnode;

p=newnode;

}return head;

}//列印單鏈表

void printlist(pnode head)

temp=head->next;

while(temp!=null)

printf("\n");

}

例子:建立 type a[6]=; 則結果為

在列印函式中,寫成如下形式if(null==head),是為了防止出錯。如果寫為(head=null),編譯器編譯時將不會報錯,執行會出錯;反過來寫為(null=head),會報錯。

(2)逆轉

//反轉鍊錶

pnode reverse(pnode head)

head->next=pre;

return head;

}

執行結果:

(3)查詢鍊錶中間結點

思想是應用快慢指標的思想,都從頭結點出發,快指標一次移動2步,慢指標一次移動一步,當快指標移動至鍊錶尾部時,慢指標剛好到達鍊錶中間。

//尋找單鏈表中間借點 快慢指標

pnode findmiddle(pnode head)

fast=slow=head;

while(null!=fast->next)

return slow;

}

結果:

逆轉單鏈表

逆轉單鏈表 struct node reverse llist node head 此時temp表示以前的尾結點,p表示temp結點的前一結點 head temp 逆轉尾結點為頭結點 head next p 頭結點指標域指向p return head 逆轉迴圈鍊錶 struct node rever...

單鏈表逆轉

單鏈表逆轉 單鏈表逆轉,將單鏈表中各結點的next域改為指向其前驅結點。原先第乙個結點的next域為空,head改為指向原先的最後乙個結點。逆轉剛才如下圖所示 鍊錶類singlylist public class singlylist 構造單鏈表,由values陣列提供元素 public singl...

單鏈表逆轉

資料結構與演算法題目集 中文 list reverse list l 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型別 l是給定單鏈表,函式reverse要返回被逆轉後的鍊錶。i...