将一个带头结点的单链表a分解为两个带头结点的单链表a和b
时间: 2024-06-10 10:08:34 浏览: 220
将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,并且保持其相对顺序不变。可以使用以下算法实现:
1. 初始化序号变量i为0。
2. 创建一个新的链表B,并将其初始化为空。
3. 创建两个指针ra和rb,分别指向A表和B表的尾结点。
4. 创建一个指针p,指向A表的第一个结点。
5. 将A表的头结点的next指针置空。
6. 遍历链表A,对每个结点执行以下操作:
1) 将序号i加1。
2) 如果i是偶数,将当前结点插入B表的尾部,并更新rb指针。
3) 如果i是奇数,将当前结点插入A表的尾部,并更新ra指针。
4) 将p指针指向下一个结点。
7. 遍历结束后,将A表和B表的尾结点的next指针置空。
8. 返回B表。
代码如下:
```
LinkList DisCreat_1(LinkList &A){
int i = 0;
LinkList B = (LinkList)malloc(sizeof(LNode));
B->next = NULL;
LNode *ra = A, *rb = B;
LNode *p = A->next;
A->next = NULL;
while(p != NULL){
i++;
if(i % 2 == 0){
rb->next = p;
rb = p;
} else{
ra->next = p;
ra = p;
}
p = p->next;
}
ra->next = NULL;
rb->next = NULL;
return B;
}
```
阅读全文