本帖最后由 caijie001 于 2018-6-12 13:15 编辑
假如列表项中已经有了元素呢,还是原来的代码,逻辑思维超强。原来的列表是下图这样子的:
假设插入的列表项的xItemValue是2,而原有的列表项的xItemValue值是3,那么,按照源码,我们插入的列表项是在中间了。而pxIterator则是①号列表项。 插入后的效果:
分析一下插入的过程: 新的列表项的pxNext指向的是pxIterator->pxNext,也就是③号列表项。因为一开始pxIterator->pxNext=指向的就是③号列表项!! - pxNewListItem->pxNext = pxIterator->pxNext;
而pxNewListItem->pxNext 即③号列表项的指向上一个列表项指针(pxPrevious)的则指向新插入的列表项,也就是②号列表项了。 - pxNewListItem->pxNext->pxPrevious = pxNewListItem;
新插入列表项的指向上一个列表项的指针pxNewListItem->pxPrevious指向了辅助列表项pxIterator。很显然要连接起来嘛! - pxNewListItem->pxPrevious = pxIterator;
同理,pxIterator列表项的指向下一个列表项的指针则指向新插入的列表项了pxNewListItem。 - pxIterator->pxNext = pxNewListItem;
而其他没改变指向的地方不需改动。(图中的两条直线做的连接线是不需要改动的) 当插入完成的时候,记录一下新插入的列表项属于哪个列表。并且让该列表下的列表项数目加一。 - pxNewListItem->pvContainer = ( void * ) pxList;
- ( pxList->uxNumberOfItems )++;
|