内容介绍:这个博客只有代码实现,没有逻辑解释
链表结点
typedef struct node{
int data;
struct node *next;
}LNode, *LinkedList;
1.数据的两中插入方式
1>头插法
LinkedList headInsert(LinkedList *L){
LinkedList p,s;
(*L) = s = (LinkedList)malloc(sizeof(LNode));
s->next = NULL;
int num;
scanf("%d", &num);
while(num != -1){
p = (LinkedList)malloc(sizeof(LNode));
p->data = num;
p->next = s->next;
s->next = p;
scanf("%d", &num);
}
return s;
}
2>尾插法
LinkedList tailInsert(LinkedList *L){
LinkedList p,s;
int num;
(*L) = s = (LinkedList)malloc(sizeof(LNode));
s->next = NULL;
scanf("%d", &num);
while(num != -1){
p = (LinkedList)malloc(sizeof(LNode));
p->data = num;
p->next = NULL;
s->next = p;
s = p;
scanf("%d", &num);
}
return (*L);
}
2.增(给第k给结点之后增加一个值为x的结点)
void add(LinkedList L, int k, int x){
int num;
LinkedList p,s;
p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
s = (LinkedList)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
}
3.删(删除第k个结点)
void deleteK(LinkedList L, int k){
LinkedList p,q;
p = L->next;
for(int i=1; i<k-1; i++){
p = p->next;
}
q = p->next;
p->next = q->next;
free(q);
}
4.改(更改第k个结点的值为x)
void update(LinkedList L, int k, int x){
LinkedList p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
p->data = x;
}
5.查(查询第k个结点的值 )
int getK(LinkedList L, int k){
LinkedList p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
return p->data;
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkedList;
LinkedList headInsert(LinkedList *L){
LinkedList p,s;
(*L) = s = (LinkedList)malloc(sizeof(LNode));
s->next = NULL;
int num;
scanf("%d", &num);
while(num != -1){
p = (LinkedList)malloc(sizeof(LNode));
p->data = num;
p->next = s->next;
s->next = p;
scanf("%d", &num);
}
return s;
}
LinkedList tailInsert(LinkedList *L){
LinkedList p,s;
int num;
(*L) = s = (LinkedList)malloc(sizeof(LNode));
s->next = NULL;
scanf("%d", &num);
while(num != -1){
p = (LinkedList)malloc(sizeof(LNode));
p->data = num;
p->next = NULL;
s->next = p;
s = p;
scanf("%d", &num);
}
return (*L);
}
void add(LinkedList L, int k, int x){
int num;
LinkedList p,s;
p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
s = (LinkedList)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
}
void deleteK(LinkedList L, int k){
LinkedList p,q;
p = L->next;
for(int i=1; i<k-1; i++){
p = p->next;
}
q = p->next;
p->next = q->next;
free(q);
}
void update(LinkedList L, int k, int x){
LinkedList p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
p->data = x;
}
int getK(LinkedList L, int k){
LinkedList p = L->next;
for(int i=1; i<k; i++){
p = p->next;
}
return p->data;
}
void print(LinkedList L){
LinkedList p = L->next;
while(p){
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
}
int main(){
LinkedList head = NULL;
head = headInsert(&head);
head = tailInsert(&head);
print(head);
add(head, 3, 4);
print(head);
deleteK(head, 4);
print(head);
update(head, 4, 4);
print(head);
int num = getK(head, 3);
printf("%d",num);
}