在list.c中,把删除任意一个结点。- ^# o/ C3 ^* g# J' t
) Y* L( `! ?0 a4 b; H" Y( M3 Q0 j& a
/ o; J+ j1 x& p4 I4 t+ n, A- unsigned portBASE_TYPE uxListRemove( xListItem * const pxItemToRemove ): w0 V( d+ b" z' R9 _/ y
- {
$ Q' l) o& [% w3 K! h9 D - xList * pxList;8 I, ^3 P) U7 Q) y
4 {* P( s5 U$ G' y- /*你要删除这个结点,那你总不能直接删吧,怎么也得和你上下的哥们交接好工作吧,可不能拍屁股走人,
( r4 e- ]1 e6 V - 要告诉你下面的那个哥们,我走了,以后你的你的上线就得是我现在的上线。*/+ t; J+ }) e1 y; o% ?( c6 C8 E
- pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;+ W- q: Q# C. [$ g# F
- , x8 L; g$ {/ d9 q4 W
- /*要告诉你上面的那个哥们,我走了,以后你的你的下线就得是我现在的下线。*// I0 C' e! r! V& {' C( i
- pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;4 @$ Z4 o8 b8 i' M2 u' i- Z+ M
- , W2 q# e) [; A$ _' t
- /* 搞清楚要删除的结点现在在哪个链表中。*// q7 c! V! n9 k0 s) f0 }+ O" Y
- pxList = ( xList * ) pxItemToRemove->pvContainer;8 @ Z1 Q, n. X- I1 V% H' G6 v6 q3 c
- % d% M" M5 v: s9 `" H
- /* 如果当前的pxIndex指向要删除的结点的话,要找人的话,只好请他找我(pxPrevious)的上线了。 */' f2 Q3 o8 p4 t! \
- if( pxList->pxIndex == pxItemToRemove )
7 @1 h1 v/ l' R9 c5 r - {) z3 V+ T0 o2 V% R- X
- pxList->pxIndex = pxItemToRemove->pxPrevious;
: b8 r3 q. Z2 U' n [0 u - }! q: A( ?4 w/ G, X/ a/ O4 z h% _
- /*意思是,哥不干了,我现在自由了,谁也管不着了,当然,之前所属的组织中的结点数量就少了一个。*/
+ E: Z! @9 k3 {3 K/ w4 l8 c - pxItemToRemove->pvContainer = NULL;; q4 S6 r- N9 D4 R r7 G$ T$ ^
- ( pxList->uxNumberOfItems )--;
7 ^) u, S, n3 [) e; J. ~
7 f4 q3 Z1 i" O' ~# n; k- /*告诉调用者此链表中还剩多少可用的结点。*/
[ ^& v2 h9 Z* e& O - return pxList->uxNumberOfItems;! \* g, j8 K3 a4 i) h9 F
- }
复制代码 Enjoy,欢迎拍砖。+ r6 L" C* X7 `" s% _, S& J5 l7 |
( h2 g. |0 ~0 i( h) j
|