C编程splliting链表成一半

时间:2015-10-31 15:41:30

标签: c pointers linked-list nodes

我试图在C编程中将链表拆分为一半时遇到了一些问题。这是代码:

typedef struct _listnode {
    int item;
    struct _listnode *next;
} ListNode;         // You should not change the definition of ListNode

typedef struct _linkedlist {
    int size;
    ListNode *head;
} LinkedList;   

}

1 个答案:

答案 0 :(得分:1)

您没有这样说,但我认为当您将列表拆分为两个时,您不希望保留原始列表。如果是这样,您只需要找到剪切链接的位置,例如:

head1 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> NULL     head2 -> NULL

head1 -> 1 -> 2 -> 3 -> NULL     head2 -> 4 -> 5 -> 6 -> NULL

在这里,您必须在示例节点中识别第一个loist的新尾部tail 3.将新列表的头部设置为tail->next,将tail->next设置为{ {1}}并调整列表中的计数。

您的代码中的奇数和偶数不需要不同的分支。如果列表具有奇数个节点,则一个列表将使一个节点多于另一个节点:NULL将使正确的列表更长,left = total / 2将使左列表更长。只需选择一个即可完成。