#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
/* data */
int data;
struct Node* next;
} Node;
Node* createLinkedList(int value);
void insertHead(Node* list, int value);
void insertTail(Node* list, int value);
void insertBehind(Node* list, int value, int index);
void insertBefore(Node* list, int value, int index);
void removeHead(Node* list);
void removeTail(Node* list);
void removeIndex(Node* list, int index);
int length(Node* list);
void printList(Node* list);
int main(int argc, char const* argv[])
{
Node* list = createLinkedList(10);
for (int i = 0; i < 10; i++)
{
insertTail(list,i);
}
insertBehind(list,10,0);
insertBefore(list,10,0);
//removeHead(list);
//removeTail(list);
//removeIndex(list, 0);
int len = length(list);
printList(list);
return 0;
}
Node* createLinkedList() {
Node* list = (Node*)malloc(sizeof(Node));
list->data = 0;
list->next = NULL;
return list;
}
void insertHead(Node* list, int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->next = list->next;
list->next = node;
list->data++;
}
void insertBefore(Node* list, int value, int index) {
if (length(list) - 1 < index) {
return;
}
list->data++;
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
for (int i = 0; i < index; i++) {
list = list->next;
}
if (list->next->next != NULL)
{
node->next = list->next;
}
else
{
node->next = NULL;
}
list->next = node;
}
void insertBehind(Node* list, int value, int index) {
if (length(list) - 1 < index) {
return;
}
list->data++;
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
for (int i = 0; i < index+1; i++) {
list = list->next;
}
if (list->next->next != NULL)
{
node->next = list->next;
}
else
{
node->next = NULL;
}
list->next = node;
}
void insertTail(Node* list, int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->next = NULL;
list->data++;
while (list->next){
list = list->next;
}
list->next = node;
}
void removeIndex(Node* list,int index) {
if (length(list)-1<index){
return;
}
list->data--;
for (int i = 0; i < index; i++) {
list = list->next;
}
Node* enwNext = list->next->next;
free(list->next);
list->next = enwNext;
}
void removeHead(Node* list) {
list->data--;
Node* enwNext = list->next->next;
free(list->next);
list->next = enwNext;
}
void removeTail(Node* list) {
list->data--;
int index = length(list);
for (int i = 0; i < index; i++){
list = list->next;
}
free(list->next);
list->next = NULL;
}
// 工具方法
int length(Node* list) {
return list->data;
}
void printList(Node* list) {
if (list->data == 0)
{
printf("List is empty");
return;
}
list = list->next;
printf("[ ");
while (list->next)
{
printf("%d,", list->data);
list = list->next;
}
printf("%d", list->data);
printf(" ]");
}
给自己一个备份