#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
struct node *next;
}LNode;
int MK_PrintNode(LNode *node)
{
int i = 0;
if (NULL == node)
{
return -1;
}
printf("----------------------- \r\n");
while (NULL != node->next)
{
printf("node %d , val = %d \r\n", i++, node->next->data);
node = node->next;
}
printf("----------------------- \r\n");
return 0;
}
int MK_AddListNode(LNode *head, int val)
{
if (NULL == head)
{
return -1;
}
LNode *node = NULL;
node = (LNode *)malloc(sizeof(struct node));
if (NULL == node)
{
return -1;
}
node->data = val;
node->next = head->next;
head->next = node;
printf("[%s][%d]val = %d, node->val = %d\r\n", __FUNCTION__,__LINE__,head->next->data, node->data);
return 0;
}
int MK_FindAndInsertNode(LNode *current, int val)
{
if (NULL == current)
{
return -1;
}
LNode *p = NULL;
LNode *saveNode = NULL;
LNode *previousNode = NULL;
p = current;
while (NULL != p->next)
{
if (p->next->data == val)
{
printf("MK_FindAndInsertNode val is = %d \r\n", p->next->data);
saveNode = p->next;
previousNode = p;
break;
}
p = p->next;
}
if (NULL != saveNode)
{
LNode *new = (LNode*) malloc(sizeof(struct node));
if (NULL == new)
{
return -1;
}
new->data = 12;
new->next = previousNode->next;
previousNode->next = new;
}
return 0;
}
int MK_DelNode(LNode *head, int val)
{
if (NULL == head)
{
return -1;
}
LNode *p = NULL;
LNode *q = NULL;
p = head;
while (NULL != p->next)
{
printf("MK_DelNode p->data = %d\r\n", p->data);
if (p->next->data == val)
{
p->next = p->next->next;
//free(p->next);
break;
}
p = p->next;
}
}
int main(void)
{
int i = 0;
int ret = 0;
LNode *head = NULL;
LNode *tmphead = NULL;
head = (LNode *)malloc(sizeof(struct node));
if (NULL == head)
{
return -1;
}
memset(head, 0, sizeof(head));
head->next = NULL;
tmphead = head;
//-----create list, 3 Nodes
ret = MK_AddListNode(tmphead, 15);
ret = ret ? ret : MK_AddListNode(tmphead, 10);
ret = ret ? ret : MK_AddListNode(tmphead, 5);
//printf LinkList
MK_PrintNode(tmphead);
//-------insert a New Node
ret = MK_FindAndInsertNode(tmphead, 15);
//printf LinkList
MK_PrintNode(tmphead);
//-------delete a Node
ret = MK_DelNode(tmphead, 10);
//printf LinkList
MK_PrintNode(tmphead);
free(head);
return ret;
}