链表的递归实现“如果不存在则附加”

时间:2013-11-25 03:08:34

标签: c#

public bool add(int e)
    {
        if(head == null)
        {
            Node n = new Node 
            {
                element = e
            };
            head = n;
            return true;
        }
        Node t = head;
        if(t.next == null)
        {
            if(t.element == e)
            { return false; }
            Node n = new Node
            {
                element = e
            };
            t.next = n;
            return true;
        }
        t = t.next;
        this.add(e);

        return true;
    }

这是在set中添加新节点的代码。不允许重复的值。有一个名为Sets的Main Class和一个名为Nodes的内部类。 我知道Node t = head;正在创建一个问题,无论如何要使这个递归?即使传递额外的可选参数也无济于事。

1 个答案:

答案 0 :(得分:2)

如果我正确地理解了你的问题,为了使它递归,你需要将它分成两个函数,一个用于处理head == null情况的公共函数和一个用于处理n.next == null的私有函数,递归的。

public bool add(int e)
{
    if (head == null)
    {
        head = new Node { element = e };
        return true;
    }

    return add(head, e);
}

private bool add(Node n, int e) {
    if (n.element == e)
        return false;

    if (n.next == null) {
        n.next = new Node { element = e };
        return true;
    }

    return add(n.next, e);
}

但是,我建议做一些类似于下面的事情,它在一个函数中执行所有操作:

public bool add(int e)
{
    if (head == null)
    {
        head = new Node { element = e };
        return true;
    }

    if (head.element == e)
        return false;

    Node n = head;
    while (n.next != null) {
        if (n.element == e)
            return false;
        n = n.next;
    }

    n.next = new Node { element = e };
    return true;
}