單鏈表經典問題3

2021-10-09 08:16:30 字數 2374 閱讀 2512

單鏈表中節點型別定義如下:

typedef

struct link node,

*linklist;

1.試編寫在帶頭節點的單鏈表l中刪除乙個最小值節點的高效演算法(假設最小值節點時唯一的)

void

delete_minx

(linklist& l)

pre = pre->next;

p = p->next;

} min_pre->next = min_p->next;

cout << min_p->data<

}

2.設在乙個帶頭節點的單鏈表中所有元素節點的資料值無序,試編寫乙個函式,刪除表中所有介於給定的兩個值(作為函式引數給出)之間的元素的元素

void

delete_between

(linklist& l,

int x,

int y)

else

}}

3.有乙個帶頭節點的單鏈表l,設計乙個演算法使其元素遞增有序

void

sort

(linklist& l)

node* p = l->next;

node* rear = p->next;

p->next =

null

;//斷鏈,讓其只剩下乙個節點,最後採用插入法;

p = rear;

while

(p !=

null

) p->next = q_pre->next;

q_pre->next = p;

p = rear;

}//方法2:交換元素值

/*int length = 0;

node* p = l->next;

while (p != null)

if (length <= 1)

node* pre = l->next;;

p = pre->next;

int t = 1;

while (t < length)

pre = p;

p = p->next;

tt++;

} t++;

}*/}

4.給定兩個單鏈表,編寫演算法找出兩個鍊錶的公共節點。

linklist common

(linklist a, linklist b)

while

(q !=

null

)int k;

if(length1 >= length2)

q = b->next;

}else

p = a->next;

}while

(p!=

null

&&q!=

null

&&p->data != q->data)

cout << p->data;

if(p->data == q->data)

return

null

;}

5.給定乙個帶表頭節點的單鏈表,設head為頭指標,試寫出演算法:按遞增次序輸出單鏈表中各結點的資料元素,並釋放結點所佔的儲存空間

void

fun1

(linklist& head)

pre = p;

p = p->next;

} cout << min_p->data << endl;

min_pre->next = min_p->next;

}}

6.將乙個帶頭節點的單鏈表分成兩個單鏈表,a存放奇數結點,b存放偶數結點

;}7.在乙個遞增有序的線性表中,有數值相同的元素存在,若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不再有重複的元素

void

delete_same

(linklist& l)

node* p = pre->next;

while

(p !=

null

)else

}}

單鏈表的經典問題

單鏈表中的節點型別描述如下 typedef struct link node,linklist 使用尾插法 頭插法 建立乙個帶頭節點 不帶頭節點 的單鏈表 void creat list head linklist l 頭插法 int x l node malloc sizeof node 先建立乙...

單鏈表的經典問題4

單鏈表中結點型別定義如下 typedef struct link node,linklist 設a和b是兩個單鏈表 帶頭節點 其中元素遞增有序,設計乙個演算法從a和b中公共元素產生單鏈表c,要求不破壞a b的結點 void fun3 linklist a,linklist b else if p d...

單鏈表經典題型

單鏈表中經常考的題型中的四種題型 1.單鏈表逆置並列印,逆置又分為兩種 1 就地逆置 2 頭插法逆置 1 就地逆置顧名思義就是在不改變單鏈表儲存的基礎上進行逆置,下面的就是就地逆置的思想,具體見 struct node m q next 儲存即將斷開的結點 while q null q m m q ...