c语言链表题目

c语言链表题目


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信