單鏈表中節點型別定義如下:
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 ...