繁体   English   中英

"Java 和 Go 中的强制性 LinkedList,以及 Kattis"

[英]The obligatory LinkedList in Java and Go, plus Kattis

前言:<\/strong>

我正在攻读计算机科学学位,我们被分配了 kattis 问题。 当前的问题是确定包含普通和方括号的字符串是否平衡,即"(()[]())"<\/code>是平衡的, "[)"<\/code> , "(()]"<\/code>等不是。

问题<\/strong>

我们应该用 Java 提交问题。 我不是特别喜欢 Java,所以今天我决定尝试 Go。 然而,下面的 Go 代码没有通过 kattis 测试,而下面的 Java 代码没有。 但是,这不是完全相同<\/em>的代码吗?

平衡.go:

package main

import (
    "bufio"
    "errors"
    "fmt"
    "os"
)

type node struct {
    content rune;
    next *node;
}

type list struct {
    head *node;
    size int;
}

func (_list *list) isEmpty() bool {
    return _list.size == 0;
}

func (_list *list) push(value rune) error {
    _list.head =  &node{content: value, next: _list.head};
    _list.size++;

    return nil;
}

func (_list *list) pop() (*node, error) {
    if (_list.isEmpty()) {
        return nil, errors.New("");
    }

    oldHead := _list.head;

    _list.head = oldHead.next;
    _list.size--;


    return oldHead, nil;
}

func main() {
    scanner := bufio.NewScanner(os.Stdin);
    _list := list{};

    for scanner.Scan() {

        next := scanner.Text();

        for _, entry := range next {
            switch entry {
            case '(', '[':
                _list.push(entry);
            case ')':
                _node, err := _list.pop();

                if (err != nil || _node.content != '(') {
                    fmt.Println("0")

                    return;
                }
            case ']':
                _node, err := _list.pop();

                if (err != nil || _node.content != '[') {
                    fmt.Println("0")

                    return;
                }
            }
        }

        if (!_list.isEmpty()) {
            fmt.Println("0")

            return;
        }

        fmt.Println("1")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM