链表程序通常包括以下几种操作:
创建链表:
初始化一个空链表,通常是通过创建一个头节点开始,其`next`指针为`nullptr`。
插入节点:
在链表的开头(头部)或末尾(尾部)插入新节点,或者在特定位置插入新节点。
删除节点:
根据给定的值或位置删除链表中的节点。
查找节点:
根据给定的值查找链表中的节点。
遍历链表:
按顺序访问链表中的每个节点。
更新节点:
修改链表中节点的数据。
释放链表:
释放链表所占用的内存空间。
链表排序:
对链表中的节点进行排序,例如升序或降序。
链表反转:
将链表中的节点顺序反转。
检测链表中环的检测:
检测链表中是否存在环,并找到环的起始节点。
合并有序链表:
将两个有序链表合并成一个有序链表。
删除倒数第K个节点:
删除链表中倒数第K个节点。
求链表的中间节点:
找到链表的中间节点。
这些操作在链表程序中非常常见,不同的应用场景可能需要实现不同的链表操作。以下是一些具体的链表操作示例代码:
创建链表
```c
node* create() {
node *head, *p, *s;
head = (node*)malloc(sizeof(node));
p = head;
int circle = 1, x;
while(circle) {
printf("please input number: \n");
scanf("%d",&x);
if(x!=0) {
s=(node*)malloc(sizeof(node));
s->data=x;
p->next=s;
p=s;
} else circle=0;
}
head=head->next;
p->next=NULL;
return head;
}
```
插入节点
```c
node* insert(node* head, node* s) {
node *p=head;
while(p->next!=NULL && s->data>p->next->data)
p=p->next;
if(p->next==NULL)
p->next=s;
return head;
}
```
删除节点
```c
node* del(node* head, int num) {
node *p1,*p2;
p1=head;
while(num!=p1->data && p1->next!=NULL)
p1=p1->next;
if(num==p1->data) {
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}
return head;
}
```
遍历链表
```c
void traverse(node* head) {
node* temp = head;
while(temp!=NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
```
释放链表
```c
void freeList(node* head) {
node* temp;
while(head!=NULL) {
temp = head;
head = head->next;
free(temp);
}
}
```
这些示例代码展示了链表的基本操作,实际应用中可能需要根据具体需求进行扩展和优化。