Node * merge(Node*h1,Node*h2) { Node * p; p=(Node*)malloc(sizeof(Node)); while(h1!=NULL&&h2!=NULL) { if(h1->data>=h2->data) { p->next>=h2; h2=h2->next; } else{ p->next=h1; h1=h1->next; } p=p->next; } if(h1=NULL) { p->next=h2; } else p->next=h1; return p; }为什么无法将有序链表合并
时间: 2024-02-14 07:17:20 浏览: 25
这段代码中有一些错误:
1. 在第7行,应该是 `p->next = h1` 或者 `p->next = h2`,而不是 `p->next >= h2`。
2. 在第14行,应该是 `if(h1==NULL)`,而不是 `if(h1=NULL)`。
除此之外,这个函数并没有将两个有序链表合并成一个有序链表,而是创建了一个新的链表并将较小的节点插入其中,这并没有达到合并的目的。正确的合并方式应该是创建一个新的链表,依次将两个链表中较小的节点插入其中,直到一个链表为空,然后将另一个链表的剩余节点插入新链表的末尾。具体来说,可以参考下面的代码:
```
Node * merge(Node *h1, Node *h2) {
Node *p1 = h1, *p2 = h2, *newHead = NULL, *newTail = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->data <= p2->data) {
if (newHead == NULL) {
newHead = p1;
newTail = p1;
} else {
newTail->next = p1;
newTail = p1;
}
p1 = p1->next;
} else {
if (newHead == NULL) {
newHead = p2;
newTail = p2;
} else {
newTail->next = p2;
newTail = p2;
}
p2 = p2->next;
}
}
if (p1 != NULL) {
if (newHead == NULL) {
newHead = p1;
} else {
newTail->next = p1;
}
} else {
if (newHead == NULL) {
newHead = p2;
} else {
newTail->next = p2;
}
}
return newHead;
}
```