題目:
輸入乙個單向鍊錶。如果該鍊錶的結點數為奇數,輸出中間的結點;如果鍊錶結點數為偶數,輸出中間兩個結點前面的乙個。
思考:最簡單的解法:從頭到尾遍歷一遍陣列,得到鍊錶大小n。然後再從頭走n/2次,則一共需要的時間為1.5n。
優化:想起以前一道題目,用n的方法反轉乙個單向鍊錶。如果只用乙個變數header,是不可能的,用了preheader,proheader,nowheader三個變數則變成了一種可能。那就想一想有沒有空間換時間的可能性。假如一開始我用兩個變數,firstheader,secheader,題目要求的輸出結點總是結點總和的一半,那我可不可以first和sec一起走,但是每次都是sec走兩下first走一下,當sec到達末尾後,first剛好走了一半。通過多了乙個變數,來節約了0.5n次的時間。
**:
struct node;
class list
node* findnode()
node* first = header;
node* sec =header;
int walkcount = 0;
while (sec!=null)
}return first;
} node* header;
};
單向鍊錶的查詢 openjudge
總時間限制 2ms記憶體限制 1024kb 描述建立乙個鏈式儲存的線性表,要求找出該煉表中值為x的元素有多少個?輸入輸入若干整數,以0結束。再輸入x的值 輸出 x在鍊錶中出現的次數 樣例輸入 3 2 3 3 5 8 5 3 0 3 樣例輸出 4 提示本題只有一組測試資料,不需要重複 這答題咋一看挺水...
單向鍊錶的遍歷 查詢
單向鍊錶的建立在這裡不在贅述,詳細請看另一篇文章 單向鍊錶的建立 在本篇文章中,主要通過舉例的方式來幫大家理解單向鍊錶的基本遍歷。本篇文章中建立節點用以下表示 typdef struct node elemsn 例一 輸出單向鍊錶尾節點的值 void printtail elemsn head 傳遞...
單向鍊錶逆序問題
問題 將乙個單向單向鍊錶逆序倒轉,要求o n 的時間複雜度和o 1 的空間複雜度 該問題有兩種解法,一種非遞迴,一種是遞迴,如下 include include link.h typedef struct linknode linknode 遞迴 linknode reverselink linkn...