如何用c语言实现遍历单链表
时间: 2023-11-28 16:05:18 浏览: 51
遍历单链表可以采用指针来实现。具体的实现过程如下:
1. 定义一个指针p指向链表的头结点;
2. 使用while循环来遍历整个链表,直到p指向空节点为止;
3. 在循环体中,输出p所指向节点的数据,然后将p指向下一个节点。
代码示例如下:
```c
// 定义单链表节点结构体
typedef struct ListNode{
int val;
struct ListNode *next;
}ListNode;
// 遍历单链表
void traverseList(ListNode *head){
ListNode *p = head;
while(p != NULL){
printf("%d ", p->val);
p = p->next;
}
}
```
在遍历单链表时,我们可以根据实际需要来输出节点的数据,例如输出节点的值、地址等信息。
相关问题
用C语言实现单链表遍历
以下是用C语言实现单链表遍历的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 遍历单链表
void traverseList(ListNode* head) {
ListNode* p = head;
while (p != NULL) {
// 对每个节点执行操作,这里输出节点的值
printf("%d ", p->val);
// 指针p指向下一个节点
p = p->next;
}
}
int main() {
// 创建单链表
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->val = 1;
head->next = NULL;
ListNode* node1 = (ListNode*)malloc(sizeof(ListNode));
node1->val = 2;
node1->next = NULL;
head->next = node1;
ListNode* node2 = (ListNode*)malloc(sizeof(ListNode));
node2->val = 3;
node2->next = NULL;
node1->next = node2;
// 遍历单链表
traverseList(head);
// 释放内存
free(head);
free(node1);
free(node2);
return 0;
}
```
在遍历单链表时,需要注意链表为空的情况,即头节点为空。此时直接返回即可。
用C语言实现对单链表按优先级排序
在C语言中,我们可以使用插入排序(Insertion Sort)算法对单链表按优先级进行排序。具体步骤如下:
1. 创建一个新的空链表,作为排好序的链表。
2. 对原链表中的每个节点,依次将其插入到排好序的链表中,并保持链表的有序性。具体来说,我们可以从排好序的链表的头节点开始,一直遍历到尾节点,找到第一个大于等于该节点的位置,然后将该节点插入到该位置之前。
以下是使用C语言实现插入排序的代码:
```
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* insert(struct ListNode* head, struct ListNode* node) {
if (head == NULL || node->val < head->val) {
node->next = head;
return node;
}
struct ListNode* p = head;
while (p->next != NULL && node->val >= p->next->val)
p = p->next;
node->next = p->next;
p->next = node;
return head;
}
struct ListNode* insertion_sort_list(struct ListNode* head) {
struct ListNode* new_head = NULL;
while (head != NULL) {
struct ListNode* node = head;
head = head->next;
new_head = insert(new_head, node);
}
return new_head;
}
int main() {
struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n5 = (struct ListNode*)malloc(sizeof(struct ListNode));
n1->val = 4;
n2->val = 10;
n3->val = 3;
n4->val = 5;
n5->val = 1;
n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = NULL;
struct ListNode* new_head = insertion_sort_list(n1);
while (new_head != NULL) {
printf("%d ", new_head->val);
new_head = new_head->next;
}
return 0;
}
```
其中,我们通过定义一个链表节点结构体来表示单链表,使用insert()函数将一个节点插入到有序链表中,使用insertion_sort_list()函数对原链表进行排序,函数返回排序后的结果。