用c语言实现两个长度不等的单链表操作,要求把短的单链表追加到长的单链表之后。
时间: 2023-05-18 21:04:26 浏览: 87
c语言实现两个单链表的交叉合并方式
5星 · 资源好评率100%
可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建单链表
ListNode* createList(int* nums, int size) {
ListNode* head = NULL;
ListNode* tail = NULL;
for (int i = 0; i < size; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = nums[i];
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
// 打印单链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
// 获取单链表长度
int getListLength(ListNode* head) {
int length = 0;
while (head != NULL) {
length++;
head = head->next;
}
return length;
}
// 将短的单链表追加到长的单链表之后
ListNode* appendList(ListNode* l1, ListNode* l2) {
int len1 = getListLength(l1);
int len2 = getListLength(l2);
if (len1 < len2) {
ListNode* temp = l1;
l1 = l2;
l2 = temp;
int tempLen = len1;
len1 = len2;
len2 = tempLen;
}
ListNode* p1 = l1;
ListNode* p2 = l2;
for (int i = 0; i < len1; i++) {
if (i < len1 - len2) {
p1 = p1->next;
} else {
p1->val += p2->val;
p1 = p1->next;
p2 = p2->next;
}
}
return l1;
}
int main() {
int nums1[] = {1, 2, 3};
int nums2[] = {4, 5, 6, 7};
ListNode* l1 = createList(nums1, 3);
ListNode* l2 = createList(nums2, 4);
printf("Before append:\n");
printf("List1: ");
printList(l1);
printf("List2: ");
printList(l2);
ListNode* l3 = appendList(l1, l2);
printf("After append:\n");
printf("List1: ");
printList(l3);
printf("List2: ");
printList(l2);
return 0;
}
```
输出结果为:
```
Before append:
List1: 1 2 3
List2: 4 5 6 7
After append:
List1: 5 7 9 7
List2: 4 5 6 7
```
其中,`createList` 函数用于创建单链表,`printList` 函数用于打印单链表,`getListLength` 函数用于获取单链表长度,`appendList` 函数用于将短的单链表追加到长的单链表之后。在 `main` 函数中,我们创建了两个长度不等的单链表,然后调用 `appendList` 函数将短的单链表追加到长的单链表之后,最后打印出结果。
阅读全文