奇怪的甚至使用c#在链表中排序

时间:2016-07-06 08:27:47

标签: c# linked-list

之前的一段工作代码被某人改变了,现在它给出了错误。 当我推,它总是有空节点。有人请指导。

push方法中,它始终传递null。

using System;

/* a node of the singly linked list */
public class node
{
    public int data;
    public node next;
}

public static class GlobalMembers
{
    public static void segregateEvenOdd(node head_ref)
    {
        node end = head_ref;
        node prev = null;
        node curr = head_ref;

        /* Get pointer to the last node */
        while (end.next != null)
        {
            end = end.next;
        }

        node new_end = end;

        /* Consider all odd nodes before the first even node
           and move then after end */
        while (curr.data % 2 != 0 && curr != end)
        {
            new_end.next = curr;
            curr = curr.next;
            new_end.next.next = null;
            new_end = new_end.next;
        }

        // 10->8->17->17->15
        /* Do following steps only if there is any even node */
        if (curr.data % 2 == 0)
        {
            /* Change the head pointer to point to first even node */
            head_ref = curr;

            /* now current points to the first even node */
            while (curr != end)
            {
                if ((curr.data) % 2 == 0)
                {
                    prev = curr;
                    curr = curr.next;
                }
                else
                {
                    /* break the link between prev and current */
                    prev.next = curr.next;

                    /* Make next of curr as NULL  */
                    curr.next = null;

                    /* Move curr to end */
                    new_end.next = curr;

                    /* make curr as new end of list */
                    new_end = curr;

                    /* Update current pointer to next of the moved node */
                    curr = prev.next;
                }
            }
        }

        /* We must have prev set before executing lines following this
           statement */
        else
        {
            prev = curr;
        }

        /* If there are more than 1 odd nodes and end of original list is
          odd then move this node to end to maintain same order of odd
          numbers in modified list */
        if (new_end != end && (end.data) % 2 != 0)
        {
            prev.next = end.next;
            end.next = null;
            new_end.next = end;
        }
        return;
    }


    public static void push(node head_ref, int new_data)
    {

        node new_node =new node();// = (node) malloc(sizeof(node));


        new_node.data = new_data;

        /* link the old list off the new node */
        new_node.next = head_ref;

        /* move the head to point to the new node */
        head_ref = new_node;
    }

    /* Function to print nodes in a given linked list */
    public static void printList(node node)
    {
        while (node != null)
        {
            Console.Write("{0:D} ", node.data);
            node = node.next;
        }
    }

    /* Drier program to test above functions*/
    static int Main()
    {

        node head = null;

        /* Let us create a sample linked list as following
          0->2->4->6->8->10->11 */

        push(head, 11);
        push(head, 10);
        push(head, 8);
        push(head, 6);
        push(head, 4);
        push(head, 2);
        push(head, 0);

        Console.Write("\nOriginal Linked list \n");
        printList(head);

        segregateEvenOdd(head);

        Console.Write("\nModified Linked list \n");
        printList(head);

        return 0;
    }
}

1 个答案:

答案 0 :(得分:3)

像这样更改列表:

public static node push(node head_ref, int new_data) {


    node new_node = new node(); // = (node) malloc(sizeof(node));

    new_node.data = new_data;

    /* link the old list off the new node */
    new_node.next = head_ref;

    /* move the head to point to the new node */
    head_ref = new_node;
    return head_ref;
}

static int Main()
{

    node head = null;

    /* Let us create a sample linked list as following
      0->2->4->6->8->10->11 */


      head = push(head, 11);