目錄
1.設計乙個遞迴演算法,刪除不帶頭結點的單鏈表l中所有值為x的結點。
2.刪除帶頭結點的單鏈表l中所有值為x的結點。
3.在帶頭結點的單鏈表l中從尾到頭反向輸出每個結點的值
4.帶頭結點單鏈表l中刪除乙個最小值結點的比較高效的演算法,假設最小值結點唯一
5.將帶頭結點的鍊錶就地逆置
明日繼續更~
以下是幾道涉及到鍊錶的**題。
注意涉及到鍊錶的操作,一定要在紙上把過程先畫出來,再寫程式!
**
//刪除不帶頭結點的單鏈表l中所有值為x的結點
void del_x_3(linklist &l, elemtype x)else
}
這道題返回值為空,不是因為返回值位址相互連線在一起的,而是因為在本來的鍊錶中逐個刪除才得到的新鍊錶。原理就是逐個刪除等於x的結點。
這個不是遞迴演算法,而是正常解法
//刪除帶頭結點的單鏈表l中所有值為x的結點。
void del_x_2(linklist &l, elemtype x)else
}}
這道題返回值為空,也是通過遍歷逐個刪除值為x的結點實現的,操作之後直接就得出了現在的鍊錶
**
//在帶頭結點的單鏈表l中從尾到頭反向輸出每個結點的值
void r_print(linklist l)
printf(l->data);
}
有頭結點比較方便,不必特殊考慮第乙個結點
從頭到尾遍歷單鏈表,用minp作為指向最小值的指標,遍歷過程如果遇到更小值的就替換minp
乙個乙個遍歷就很高效了,因為沒有重複遍歷,遍歷一次就夠了
//帶頭結點單鏈表l中刪除乙個最小值結點的比較高效的演算法,假設最小值結點唯一
linklist deletemin(linklist &l)
pre = p;
p = p->next;
}minpre->next = minp->next;
free(minp);
return l;
}
minpre->next = minp->next; 和 free(minp); 這兩句就是刪除minp結點。
把頭結點摘下,然後從第乙個結點開始,依次插入到頭結點後面直到最後乙個結點
除了自帶的l指標外,還需要 p 和 r 指標,r 是 p 的後繼
//將帶頭結點的鍊錶就地逆置
linklist reverse_l(linklist l)
}
鍊錶複習題
c或者c 實現下面的題目並測試 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?2.從尾到頭列印單鏈表 3.刪除乙個無頭單鏈表的非尾節點 4.在無頭單鏈表的乙個節點前插入乙個節點 5.單鏈表實現約瑟夫環 6.逆置 反轉單鏈表 7.單鏈表排序 氣泡排序 快速排序 8.合併兩個有序鍊錶,合併...
SAM複習題表
今天重新學了一下sam 那麼一些題目肯定是少不了的 在這裡記錄一下吧,可能沒什麼啟發的題就不寫了 題意 多個串的最長公共子串 題解 對於乙個建立sam,然後對於剩下的所有點在上面跑,對於每乙個點的狀態取最小值。但是這樣是不夠的,你還要跳一次fail來進行更新,這個的話拓撲更新就可以了 題意 求第k大...
王道課後習題2 3 22 兩個鍊錶的共同字尾
題目描述 帶頭結點的單鏈表,尋找兩個鍊錶的共同字尾的起始位置。演算法思想 雙指標法 核心 雙指標法 int length lnode l 注意 這裡之前寫成了int length lnode l 用的引用。這樣的話,head1和head2最後都會變成null。難怪執行不對。return k lnod...