zoukankan      html  css  js  c++  java
  • 双向链表的问题自我总结

    关键词:双向链表

    其实是比较简单的问题  经验丰富的人就不用往下看了。


    驱动中把所有找到的盘插入到双向链表尾(listHead),然后再从头遍历链表,把符合条件的结点放入另一个链表(disks)中。默认listHead中的第一个结点肯定符合条件,将其插入disks尾。完成这个动作之后,再取第二个结点时,listHead里的链接就变了。看起来很奇怪的问题。

    LIST_ENTRY listHead;
    LIST_ENTRY disks;
    struct DISK_INFO {
        LIST_ENTRY entry;
        ...
        }
     ...
    pListEntry = listHead.Flink;
    DiskInfo = CONTAINING_RECORD(pListEntry, DISK_INFO, entry);
    InsertTailList(&disks, &DiskInfo->entry); // (1)
    
    while(...)
    {
    pListEntry = pListEntry->Flink; //(2)其实这时候pListEntry->Flink已经不对了
    DiskInfo0 = CONTAINING_RECORD(pListEntry, DISK_INFO, entry);
    }

    明眼人可能一看就明白了 在(1)处,pListEntry被链到了disks中,那么它的Flink也已经改变了,已经不是listHead.Flink->Flink了。这其实就相当于把一个结点从链表1中断开(不完全),然后放到链表2中去,它的下一个结点肯定不是原来链表1中的下一个了。


    表达能力逐步提高中。。。

  • 相关阅读:
    无重复字符的最长子串
    有效的括号
    最长公共前缀
    罗马数字转整数
    Android解析JSON数据异步加载新闻图片
    回文数
    Java从Json获得数据的四种方式
    JavaMD5加密工具类
    div模仿select效果二:带搜索框
    BG雪碧图制作要求
  • 原文地址:https://www.cnblogs.com/bugchecker/p/3041603.html
Copyright © 2011-2022 走看看