//查詢單鏈表中間元素
#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...