标签: doubly-linked-list

将二叉搜索树转换为双向链表

最近的一次编码采访中提到了这个问题.

问:给定二叉树,编写程序将其转换为双向链表.双链表中的节点按照由Z字形级别顺序遍历形成的顺序排列

我的方法

我总是可以对树的zig-zag级别顺序进行遍历并将其存储在数组中,然后创建一个双链表.但问题需要一个就地解决方案.任何人都可以帮助解释应该使用的递归方法吗?

tree-traversal binary-search-tree doubly-linked-list

4
推荐指数
1
解决办法
2万
查看次数

具有多个父节点和子节点的链接列表

我正在尝试设计一个从文件中获取数据的程序,之后它为唯一数据提供编号,链表还包含父列表和子列表.

数据结构:

                   ____A
                  /    |     
                 B     C    
                 |  /    \  
                 E-->  F   G
                 |     |   |
                 I     J   K
Run Code Online (Sandbox Code Playgroud)

节点可以具有多个下一个节点(例如A和C),并且可以具有多于一个的先前节点.

文本文件包含这样的数据,我将从文件中获取数据并将其转换为链接列表:

                    A
                    B
                    E
                    I

                    A
                    C
                    E
                    F
                    J

                    A
                    C
                    G
                    K
Run Code Online (Sandbox Code Playgroud)

我的问题:是否可以使用具有多个下一个或多个先前节点的节点创建链接列表,如果是这样,结构将如何显示?

我尝试过的:

我创建了一个结构,其中包含父和子的4个整数数组.

struct abcd{
 char data;
 int nodeid;

 int parent[4];
 int child[4];

 struct abcd *next;

}
Run Code Online (Sandbox Code Playgroud)

因此,父数组保存最前一个节点的node-id (可以是多个,因为例如E(B&C指向它) - >(node-id-1).

子数组包含即时下一个节点(node-id +1)的node-id.

A或任何其他节点没有重复的节点.

OUTPUT:

1 :  A <-- 
2 :  B <-- 1
3    E <-- 2,5
4 …
Run Code Online (Sandbox Code Playgroud)

c linked-list doubly-linked-list

4
推荐指数
1
解决办法
7407
查看次数

双向链表上的 Java 迭代器

您好,我对 Java 很陌生,在为双向链表构建嵌套 Iterator 类时遇到了这个问题。我不确定如何编写一个public E next()方法来让它迭代双向链表

任何帮助是极大的赞赏!

  private class DoubleListIterator implements Iterator<E> {
    // instance variable
    private Node current=head;
    private Node last;
    private int index=0;

    public boolean hasNext() {
      return index < N;
    }
    public E next() {
        if (!hasNext()) throw new NoSuchElementException();

    }
    public void remove() { throw new UnsupportedOperationException(); }
  }// end class ListIterator
Run Code Online (Sandbox Code Playgroud)

java iterator doubly-linked-list

4
推荐指数
1
解决办法
2万
查看次数

java-Doubly Linked List逻辑

我试图理解双链表的java实现.我有以下代码:

public class DLLNode{
    //define variables
    public int info;
    public DLLNode next;
    public DLLNode prev;


    //Passing constructors
    public DLLNode(int i){
        info = i;
        next = prev = null;
    }

    public DLLNode(int i, DLLNode n, DLLNode p){
        info = i;
        next = n;
        prev = p;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下内容:

public class DLL {
    DLLNode head;
    DLLNode tail;

    public DLL(){
        head = tail = null;
    }

    //Check whether list is empty or not
    public boolean isEmpty(){
        return head == null;
    }

//Insert …
Run Code Online (Sandbox Code Playgroud)

java object doubly-linked-list

4
推荐指数
1
解决办法
581
查看次数

双链表是非线性数据结构还是线性数据结构?

线性数据结构顺序遍历数据元素,其中只能直接到达一个数据元素.例如:数组,链接列表.

但是在双向链表中,我们可以使用前一个指针和下一个指针来访问两个数据元素.

那么我们可以说双链表是非线性数据结构吗?

如果我错了,请纠正我.

谢谢.

data-structures doubly-linked-list

4
推荐指数
1
解决办法
6581
查看次数

包含双指针的单链表的正确名称是什么?

最近,我看到了这个:

struct node {
    node*  pNext;
    node** pPrevNext;
};

void insert_before(node** pNext, node* toInsert) {
    toInsert->pNext = *pNext;
    toInsert->pPrevNext = pNext;
    if (*pNext) (*pNext)->pPrevNext = &toInsert->pNext;
    *pNext = toInsert;
};

// node *a, *b;
// insert_before(a->pPrevNext, b);
Run Code Online (Sandbox Code Playgroud)

它看起来像一个单链表,但包含指向前一个节点的下一个指针的指针.我的问题很简单:这叫什么?如果没有"真实姓名",搜索有关此数据结构的信息在StackOverflow和整个互联网上都会显示为空.

请注意,它不是双向链表,如下所示:

struct node {
    node* pNext;
    node* pPrev;
};
Run Code Online (Sandbox Code Playgroud)

c c++ linked-list data-structures doubly-linked-list

3
推荐指数
1
解决办法
252
查看次数

使用std :: unique_ptr的双链表

有人建议实施吗?前几天我在家里试过这个,发现移动语义太难建立先前的链接或简单的链表.使用std :: unique_ptr创建树很容易.当然,由于复制/分配,std :: shared_ptr可以轻松实现这个问题.那怎么样?

c++ unique-ptr doubly-linked-list

3
推荐指数
1
解决办法
1621
查看次数

python会自动垃圾收集双链表吗?

背景

我有一个树形结构.在这个树结构中,我将节点的孩子保持为双向链表:

在此输入图像描述
(来源:双链表)

(由于创建此列表的广度优先搜索方法,我选择了此结构.)

问题

现在我担心的是垃圾收集器是否可以自动销毁此列表.当然,我只保留对这三者的根节点的引用.Afaik GC的原理是它收集内存中的数据结构,其中没有指向任何引用.但是在双向链表中,每个节点都是从它的兄弟节点引用的,兄弟节点引用节点.因此总是会引用一个节点,GC永远不会收集它.

垃圾收集器会处理双向链表吗?

如果没有,最简单的收集方式是什么?

相关问题:

为什么Lua使用垃圾收集器而不是引用计数?
Python:修改列表时的内存使用和优化

python garbage-collection doubly-linked-list

3
推荐指数
1
解决办法
676
查看次数

在LinkedList中向后移动的语法?

我知道LinkedLists是以双向链接的方式实现的,因此每个节点都有一个下一个和一个前一个指针.但是,我找不到用于访问先前节点的语法?我查看了java api,并且有一种向后迭代链表的方法.对我而言,暗示有一种简单的方法来访问先前的节点P:.

我正在尝试设计一个实验来证明LinkedLists不仅仅是一个单一链接列表,但我无法想到如何在没有在链表中向后移动的情况下这样做.

如果可能,请向我解释如何向后移动,非常感谢.

java doubly-linked-list

3
推荐指数
1
解决办法
1226
查看次数

C++ 未处理的异常。0xC0000005:读取位置 0xccccccd0 时发生访问冲突

在过去的几个小时里,我一直试图通过检查我的调用堆栈来解决这个问题,但仍然没有弄清楚发生了什么!

我的序列数据库基本上从文件中收集所需的信息,然后调用我的链接列表类以使用收集的信息创建一个新节点,并将该节点放在链接列表的末尾:

标题:

#ifndef SEQUENCE_H
#define SEQUENCE_H
#include "DNA.h"
#include "DNAList.h"

class SequenceDatabase
{
public:
    //Default Constructors
    SequenceDatabase();

    //Methods
    void importEntries(string);


private:
    DNAList list;
};

#endif
Run Code Online (Sandbox Code Playgroud)

来源:

#include "SequenceDatabase.h"
#include "DNA.h"
#include "DNAList.h"
#include <fstream>

using namespace std;
SequenceDatabase::SequenceDatabase() //Default Constructor.
{
    DNA object;
    DNAList list;
}

void SequenceDatabase::importEntries(string name)
{
    DNA* item;
    ifstream file;
    file.open(name);

    if(!file.is_open())
    {
        cout << "Error opening file!" << endl;
        exit(1);
    }

    char letter;
    string label, sequence;
    int ID, length, index;
    file >> letter;

    if(letter …
Run Code Online (Sandbox Code Playgroud)

c++ class unhandled-exception doubly-linked-list

3
推荐指数
1
解决办法
2万
查看次数