关于链表的指针问题

Pointer questions regarding linked lists

本文关键字:指针 问题 链表 于链表      更新时间:2023-10-16

好吧,伙计们,所以我一直在做一个链表程序,遇到了一个问题。我正在尝试以排序的方式将一段数据放入已经排序的链表中。现在,我正在比较用户给出的指针数据(data*newData(和头(LinkNode*current=head(,我知道这就是我的程序失败的地方。我知道我必须比较实际值,而不是内存地址,但我不确定该怎么做。有人有什么建议或想法吗?

谢谢。

void addSorted(Data * newData)
{
    if(head == NULL)
    {
        head = new LinkNode(newData);
        return;
    }
    LinkNode * current = head;
    LinkNode * previous = NULL;
    while(current != NULL)
    {
        if(newData->compareTo(current->data) == -1)
        {
            LinkNode * newNode = new LinkNode(newData);
            newNode->next = current;
            if(previous == NULL)
            {
                current->next = newNode;
            }
            else
            {
                newNode->next = previous->next;
                previous->next = newNode;
            }
            return;
        }
        previous = current;
        current = current->next;
    }
    previous->next = new LinkNode(newData);
}

简单

    if(*newData < (*current->data))     

假设运算符<对于数据类型过载

提供std::less<>的最低惯用方法服从弱总排序(I.o.w.实现运算符<(:

struct Data
{
    int id;
    std::string other;
    // details omitted
    bool operator<(const Data& b) const
    {
         if (id < rhs.id)
             return true;
         if (id > ths.id)
             return false;
         return (other < b.other);
    }
};

如果你有一个大/复杂的结构,并且所有参与的成员都为他们的类型定义了比较,你可以用TR1、Boost或C++11元组来完成这个巧妙的技巧:

    #include <tuple>
    // ...
        bool operator<(const Data& b) const
        {             
             return std::tie(id,other)< std::tie(b.id,b.other);
        }

在while循环中,您正在将newData(一个指针(与"current->data"(我想是整数(进行比较?

即如果(newData<current->data(

您可以使用memcmp来比较数据

if(newData < current->data)

应该是

if(*newData < current->data)

我想。如果不存在运算符<,实现它或者使用慢速memcmp。

此外,如果这是一个实用的代码(为什么不使用stl?(,请考虑使用跳过列表——它们会更快。

PS:运营商是一个强大的功能,请毫不犹豫地使用它们。