#include<stdlib.h>
#include<stdio.h>
定义
typedef struct ListNode{
int val;
struct ListNode* next;
}ListNode;
遍历
void print_ListNode(ListNode* head){
for(ListNode* p = head; p!=NULL; p=p->next){
printf("%d->",p->val);
}
printf("\n");
}
创建
ListNode* create(int val){
ListNode* node = malloc(sizeof(ListNode));
node->val = val;
}
搜索
int find(ListNode* head, int val){
int count = 0;
while(head){
if(head->val == val){
return count;
}
head = head->next;
count++;
}
return -1;
}
长度
int ListLen(ListNode* head){
int count = 0;
while(head){
head = head->next;
count++;
}
return count;
}
增(append)
void ListAppend(ListNode* head, int val){
while(head->next!=NULL){
head = head->next;
}
ListNode *node = create(6);
head->next = node;
}
增(insert)
void ListInsert(ListNode*head, int val, int index){
if(index == 0){
ListNode* node = create(head->val);
head->val = val;
node->next = head->next;
head->next = node;
}else{
for(int i = 0; i<index-1; i++){
head = head->next;
}
ListNode* node = create(val);
node->next = head->next;
head->next = node;
}
}
删(index>0)
void* ListDelete(ListNode*head, int index){
for(int i = 0; i< index-1; i++){
head=head->next;
}
ListNode * temp = head->next;
head->next = head->next->next;
free(temp);
}
反转
ListNode* ListReverse(ListNode*head){
if(head == NULL || head->next == NULL){
return head;
}
ListNode* newHead = ListReverse(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}
复制
ListNode* ListCopy(ListNode* head){
if(head == NULL){
return NULL;
}
ListNode* node = create(head->val);
node-> next = ListCopy(head->next);
return node;
}
网友评论