汉扬编程 编程大纲 C语言单链表插入、删除、遍历小结

C语言单链表插入、删除、遍历小结

在单链表中插入一个新的节点

C语言单链表插入、删除、遍历小结

typedef struct node{ int data; struct node *pNext;}Node;Node * head;//全局变量head指针int count; //链表中有多少条数据Node * Creat_Node(int value) //Node* 类型的指针指向一个新创建的节点{ Node *temp = (Node*)malloc(sizeof(Node)); if(NULL == temp){ printf("malloc error!\\n"); return NULL; } memset(temp,'\\0',sizeof(Node)); temp->data = value; temp->pNext = NULL; return temp;}

1.头插法:考虑2种情况①head = NULL链表为空时 ②链表不为空

void Insert_Beginning(int value){ Node* temp = Create_Node(value);//指针指向新申请的堆内存空间 temp->data = value; temp->pNext = head; //新节点和后节点关联 head =temp;//头指针指向新节点 count++;}2.尾插法①head = NULL链表为空时 ②链表不为空

重点就是找到链表最后一个节点

void Insert_Tail(int value){ Node* temp = Create_Node(value); temp->data = value; Node* temp2 = head; if(NULL == head){ //链表为空时 temp->pNext = NULL; head = temp; count++; }else{ while (NULL!=temp2->pNext) { temp2 = temp2->pNext; //指针temp2指向链表最后一个节点 } temp2->pNext = temp; //新节点和前节点关联 temp->pNext = NULL; count++; }3.在链表的第N位插入一个新的节点void Insert(int value,int position){ Node* temp1 = Creat_Node(value); temp1->data = value; if(1 == position){ temp1->pNext = head;//新节点和后节点关联 head = temp1; //头指针指向新节点 count++; return ; } Node* temp2 = head; for(int i=0;i<(position-2);i++){ temp2 = temp2->pNext;//temp2指针指向插入位置的前一个节点 } temp1->pNext = temp2->pNext; //新节点和后节点关联 temp2->pNext = temp1;//新节点和前节点关联 count++;}4.遍历节点void PrintList(){ Node* temp = head; printf("—–链表数据—–\\n"); while (NULL != temp) { printf("%d ",temp->data); temp = temp->pNext; } printf("\\n"); printf("链表共有:%d 条数据\\n",count);5.删除一个节点 void Delete_Node(int number){ Node* temp = head; if(1==number){ head = temp->pNext; free(temp); temp = NULL; count–; return; } int i ; for(i=0;i<(number-2);i++){ temp = temp->pNext;//temp指针指向删除位置的前一个节点 } Node* temp1 = temp->pNext;//temp1指向要被删除的节点 temp->pNext = temp1->pNext; count–; free(temp1); temp1=NULL; }

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6357.html

c语言数据结构——单链表的写法

C语言文本或代码中 \\n 和 \\r 的区别详解篇

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部