其他分享
首页 > 其他分享> > c – Splice_after实现forward_list

c – Splice_after实现forward_list

作者:互联网

在forward_list中有一个函数splice_after(for reference),具体地说,是给定链接中的函数#3.考虑到列表是单独链接的,如何实现这一点.

作为一个练习,当我实现它时,我不得不迭代列表,直到我在第一个节点之前到达节点(这样我可以从头到尾连接)并再次到达最后一个节点之前(这样我就可以连接当前列表了)节点到最后一个节点).这对我来说似乎并不是很有效,并且想知道是否有更好的方法可以在没有迭代的情况下完成它?

解决方法:

我怀疑你误读了一些微妙的范围规范,它说“(第一个,最后一个)”被移动,而不是“[first,last)”(注意左括号/括号).也就是说,如名称所示,拼接操作仅在第一个对象之后开始.

该函数的实现实际上非常简单(如果忽略迭代器的常量以及它可能需要处理不同的分配器这一事实):

void splice_after(const_iterator pos, forward_list& other,
                  const_iterator first, const_iterator last) {
    node* f = first._Node->_Next;
    node* p = f;
    while (p->_Next != last._Node) { // last is not included: find its predecessor
        p = p->_Next;
    }
    first._Node->Next = last._Node;  // remove nodes from this
    p->_Next = pos._Node->_Next;     // hook the tail of the other list onto last
    pos._Node->_Next = f;            // hook the spliced elements onto pos
}

此操作具有线性复杂性,因为它需要找到last的前一个.

标签:c,forward-list,singly-linked-list
来源: https://codeday.me/bug/20190902/1792054.html