#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* createList()
{
struct Node* headNode = (struct Node *)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
struct Node* createNode(int data)
{
struct Node* newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNode_head(struct Node* headNode, int data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
void insertNode_tail(struct Node* headNode, int data)
{
struct Node* newNode = createNode(data);
struct Node* tailNode = headNode;
while(tailNode->next != NULL)
{
tailNode = tailNode->next;
}
tailNode->next = newNode;
}
void insertNode_point(struct Node* headNode, int data, int posdata)
{
struct Node* posNodeFront = headNode;
struct Node* posNode = headNode->next;
if(posNode == NULL)
{
return;
}
else
{
while(posNode->data != posdata)
{
posNodeFront = posNode;
posNode = posNodeFront->next;
if(posNode == NULL)
{
return;
}
}
struct Node* newNode = createNode(data);
newNode->next = posNode;
posNodeFront->next = newNode;
}
}
void deleteNode_head(struct Node* headNode)
{
struct Node* deleteNode = headNode->next;
headNode->next = deleteNode->next;
free(deleteNode);
deleteNode = NULL;
}
void deleteNode_tail(struct Node* headNode)
{
struct Node* tailNode = headNode;
struct Node* tailNodeFront = NULL;
while(tailNode->next != NULL)
{
tailNodeFront = tailNode;
tailNode = tailNode->next;
}
free(tailNode);
tailNode = NULL;
tailNodeFront->next = NULL;
}
void deleteNode_point(struct Node* headNode, int posdata)
{
struct Node* posNode = headNode->next;
struct Node* posNodeFront = headNode;
if(posNode == NULL)
{
return;
}
else
{
while(posNode->data != posdata)
{
posNodeFront = posNode;
posNode = posNodeFront->next;
if(posNode == NULL)
{
return;
}
}
posNodeFront->next = posNode->next;
free(posNode);
}
}
void printList(struct Node* headNode)
{
struct Node* t = headNode->next;
while(t)
{
printf("%d", t->data);
t = t->next;
}
printf("\n");
}
int main()
{
struct Node* list = createList();
insertNode_head(list, 1);
insertNode_head(list, 2);
insertNode_head(list, 3);
insertNode_head(list, 4);
printList(list);
insertNode_tail(list, 5);
printList(list);
insertNode_point(list, 7, 3);
printList(list);
deleteNode_head(list);
printList(list);
deleteNode_tail(list);
printList(list);
deleteNode_point(list, 7);
printList(list);
return 0;
}
单链表头插尾插中间插入及删除C语言实现
最新推荐文章于 2021-07-21 20:23:16 发布