單向鍊錶節點的移動(排序)

2021-08-15 17:19:40 字數 1115 閱讀 4373

單向鍊錶的建立在這裡不在贅述,詳細請看另一篇文章《單向鍊錶的建立》。在本篇文章中,主要通過舉例的方式來幫大家理解單向鍊錶節點的移動。

本篇文章中建立節點用如下表示

typdef struct node elemsn;
例一:設head指向乙個非空單項鍊表,設資料域值不重複,且都為正整數,將所有奇數節點放在偶數節點之前(不允許建立新節點)

方法一:拆成兩根鍊錶再合併

elemsn * prelink(elemsn *head)

else

}for(p=head;p->next;p=p->next;)

p->next=h1;

return head;

}

方法二:

elemsn *prelink(elemsn *head)

else

}return h1;

}

例二:設head1和head2是兩個非空單向鍊錶的頭指標,資料域值重複且公升序排序,將head1和head2合成乙個公升序鍊錶

elemsn *comlink(elemsn *head1,elemsn *head2)

else

if(!head)

head=t=p;

else

t->next=null;

}if(head1)

t->next=head1;

else

t->next=head2;

return head;

}

例三:選擇排序法,將乙個非空單向鍊錶公升序排列

elemsn *selectsort(elemsn *head)

if(pm!=head)//如果最大值節點不是頭節點,則從鍊錶中移出該節點

qm->next=pm->next;

else//如果最大值節點是頭節點,頭指標後移,溢位該節點

head=head->next;

pm->next=h1;//頭插法生成公升序鍊錶

h1=pm;   

}return h1;

}

單向鍊錶刪除節點

單向鍊錶刪除節點的乙個技巧,這個是在 程式設計之美 上面看到的,可以用來對付一些演算法題。有時候會遇到這種情況,單鏈表提供乙個指標,要求要刪除指標指向的節點。如下 考慮到釋放記憶體,還再需要乙個指標 我們具體一下,有這麼乙個單向鍊錶,這個鍊錶的節點比較簡單,資料域只有乙個整型 並且當前的指標 ite...

單向鍊錶刪除節點

include include include include 使用隨機數的標頭檔案 using namespace std class list list del ptr list head,list ptr int main srand unsigned time null 以時間為隨機數的種子...

單向鍊錶節點的刪除

單向鍊錶的建立在這裡不在贅述,詳細請看另一篇文章 單向鍊錶的建立 在本篇文章中,主要通過舉例的方式來幫大家理解單向鍊錶節點的刪除。本篇文章中建立節點用如下表示 typdef struct node elemsn 在鍊錶節點的刪除中,可以分為兩種情況 刪除頭節點 pdel head 定義指標指向待刪節...