查詢單鏈表中間元素

2021-06-19 23:54:11 字數 1827 閱讀 9382

//查詢單鏈表中間元素

#include using namespace std;

struct linknode

};class linklist

; ~linklist();

void insertvalue(int nvalue);

void reverse();

void reverse2();

linknode *findlastnum(int nnum);

linknode *findmidnode(bool &isodd);

void print();

private:

linknode *phead;

};void linklist::insertvalue(int nvalue)

linknode *pcur = phead;

while (pcur->pnext != null)

linknode *ptmp = new linknode(nvalue);

pcur->pnext = ptmp;

}void linklist::reverse()

//特殊情況:如果鍊錶為空或者只有乙個元素,直接返回

if (phead->pnext == null || phead->pnext->pnext == null)

linknode *ppre = phead;

linknode *pcur = phead->pnext;

linknode *pnext;

while (pcur != null)

phead->pnext->pnext = null;

phead->pnext = ppre;

}void linklist::reverse2()

//特殊情況:如果鍊錶為空或者只有乙個元素,直接返回

if (phead->pnext == null || phead->pnext->pnext == null)

linknode *pcur = phead->pnext;

linknode *pnext = null;

linknode *pnextnext = null;

while (pcur->pnext != null) }

linknode *linklist::findlastnum(int nnum)

linknode *pfirst = phead;

int i = 0;

while (i < nnum)

pfirst = pfirst->pnext;

i++;

} linknode *psecond = phead;

while (pfirst != null)

return psecond;

}//考慮鍊錶個數為奇數odd、偶數even兩種情況

linknode* linklist::findmidnode(bool &isodd)

linknode *pfirst = phead;

linknode *psecond = phead;

while (pfirst != null && pfirst->pnext != null)

if (pfirst == null)

else

return psecond;

}void linklist::print()

linknode *pcur = phead->pnext;

while (pcur != null)

coutnvalue<}

} return 0;

}

取得單鏈表中間元素

配套的單鏈表在另一篇部落格。核心問題就是下面的那個while判斷條件,和最下面的奇數鍊錶和偶數鍊錶的問題。然後是判斷單鏈表的元素個數是奇數還是偶數的問題,觀察 畫的表。當元素個數為奇數的時候,first停止時,second位置正好就是中間的位置,問題是元素個數為偶數的時候,first停止時,中間有兩...

求單鏈表的中間元素

示例1 輸入 1 2 3 輸出 2 示例2 輸入 1 2 3 4 輸出 2思路 如果是陣列,我們可以怎麼求中間元素 arr arr.length 1 2 相模擬,如果是鍊錶 a.求鍊錶的長度 b.從頭開始遍歷鍊錶,並計數 public class middleelement 計算中間元素的索引 in...

3,找出單鏈表的中間元素

問題 找出單鏈表的中間元素 思路 快慢指標。快指標每次走兩步,慢指標每次走1步。快指標走到頭時,慢指標所指即為中間結點。如果結點個數n為偶數,則中間結點為第n 2個結點。linktable.cpp 定義控制台應用程式的入口點。include stdafx.h include include usin...