我试图在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;
}
答案 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
将使左列表更长。只需选择一个即可完成。