2024年4月30日发(作者:)
c语言链表题目
链表是一种常用的数据结构,也是C语言面试中常考的知识点之
一。本文将介绍一些常见的链表题目,并提供C语言的解答。
1. 单链表反转
题目描述:给定一个单链表,将其反转。
解答:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *p = head, *q = NULL, *r = NULL;
while(p != NULL) {
r = q;
q = p;
p = p->next;
q->next = r;
}
return q;
}
2. 删除链表中的节点
题目描述:给定一个单链表和一个目标值,删除链表中所有值为
目标值的节点。
解答:
struct ListNode* removeElements(struct ListNode* head,
int val) {
- 1 -
struct ListNode *p = head, *q = NULL;
while(p != NULL) {
if(p->val == val) {
if(q == NULL) {
head = head->next;
} else {
q->next = p->next;
}
} else {
q = p;
}
p = p->next;
}
return head;
}
3. 合并两个有序链表
题目描述:给定两个有序链表,将它们合并为一个有序链表。
解答:
struct ListNode* mergeTwoLists(struct ListNode* l1,
struct ListNode* l2) {
struct ListNode *head = NULL, *tail = NULL;
while(l1 != NULL && l2 != NULL) {
- 2 -
if(l1->val < l2->val) {
if(head == NULL) {
head = tail = l1;
} else {
tail->next = l1;
tail = tail->next;
}
l1 = l1->next;
} else {
if(head == NULL) {
head = tail = l2;
} else {
tail->next = l2;
tail = tail->next;
}
l2 = l2->next;
}
}
if(l1 != NULL) {
if(head == NULL) {
head = tail = l1;
} else {
- 3 -
tail->next = l1;
tail = tail->next;
}
}
if(l2 != NULL) {
if(head == NULL) {
head = tail = l2;
} else {
tail->next = l2;
tail = tail->next;
}
}
return head;
}
4. 判断链表是否有环
题目描述:给定一个链表,判断它是否有环。
- 4 -
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714415137a2441996.html
评论列表(0条)