设计算法将一个带头结点的单链表A 分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。
时间: 2023-04-01 15:03:37 浏览: 121
可以使用两个指针分别指向B表和C表的头结点,遍历链表A,将小于零的结点插入B表,大于零的结点插入C表,最后返回B表和C表即可。具体实现可以参考以下代码:
struct ListNode* splitList(struct ListNode* A) {
struct ListNode *B = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *C = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *p = A->next, *pb = B, *pc = C;
while (p) {
if (p->val < ) {
pb->next = p;
pb = pb->next;
} else {
pc->next = p;
pc = pc->next;
}
p = p->next;
}
pb->next = NULL;
pc->next = NULL;
return B;
}