在java中对0,1和2的链表进行排序不起作用

时间:2018-03-24 12:05:48

标签: java data-structures singly-linked-list

我对这个编程世界和java都是全新的,我正在尝试链接列表,并在尝试对0,1s和2s的链表进行排序时遇到问题。谁能指出我做错了什么?我在这里附加我的代码。事情是基于我的逻辑它应该正常工作但不幸的是它实际上返回列表,因为它没有排序。

对0s,1s和2s的链接列表进行排序

<button type="button" id="print-poem">PRINT</button>

<?php    
	 function mark_printed () { 
        $transaction_status = 'Printed';
        $field_key = "field_58c7ce7357709";
        update_field( $field_key, $transaction_status, $post_id );
        }
?>   

1 个答案:

答案 0 :(得分:0)

我不知道你的代码究竟是什么意思,但我尝试用尽可能少的更改来做到这一点

我介绍了一个用于合并两个列表的新函数

private Node merge(Node list1, Node list2){
    if (list1.next == null && list2.next == null)
        return new Node(0);
    else if (list1.next == null)
        return list2;
    else if (list2.next == null)
        return list1;
    else {
        Node curr = list1.next;
        while (curr.next != null){
            curr = curr.next;
        }
        curr.next = list2.next;
        return list1;
    }
}

并将排序功能更改为

Node sortList(Node h)
{
    if (h == null || h.next == null)
        return h;

    Node zero = new Node(0);
    Node one = new Node(1);
    Node two = new Node(2);
    Node curr = h;
    Node nextNode;

    while(curr.next != null) {
        nextNode = curr.next;

        if(curr.data == 0)
        {
            curr.next = zero;
            zero = curr;
        }
        else if(curr.data == 1)
        {
            curr.next = one;
            one = curr;
        }
        else
        {
            curr.next = two;
            two = curr;
        }
        curr = nextNode;
    }

    Node tmpList = merge(zero, one);
    h = merge(tmpList,two);
    return h;


}

这个问题有几个解决方案,其中一些更容易,仅举几例

  • 您可以遍历列表并计算0s,1s和2s的出现次数并使用此数据构建新列表
  • 您可以使用各种sorting algorithms并实施它们