我在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;
}
您没有这么说,但我认为当您将列表一分为二时,您不想保留原始列表。如果是这样的话,你只需要找到在哪里切断链接,例如:
head1 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> NULL head2 -> NULL
head1 -> 1 -> 2 -> 3 -> NULL head2 -> 4 -> 5 -> 6 -> NULL
在这里,您必须在示例节点3中标识第一个loist的新尾部tail
。将新列表的标题设置为tail->next
,将tail->next
设置为NULL
,然后调整列表中的计数。
代码中的奇数和偶数不需要不同的分支。如果列表中有奇数个节点,则一个列表中的一个节点将比另一个多:left = total / 2
将使右侧列表更长,left = (total + 1) / 2
将使左侧列表更长。选一个就完事了。