#include <stdio.h>
#include <stdlib.h>
/*節點配置*/
struct Data
{ int key;
int data;
struct Data* next;
};
typedef struct Data Node;
/*鏈表的建立*/
Node* createList(Node* head){
int a[5] = {10,20,30,40,50};
int k[5] = {1,2,3,4,5};
Node* newp = NULL;
for (int i = 0; i < 5; i++)
{
newp = malloc(sizeof(Node));
newp->data = a[i];
newp->key = k[i];
newp->next = NULL;
newp->next = head;
head = newp;
}
return head;
}
/*查找*/
Node* findList(Node* head, int k){
while (head != NULL)
{
if (head->key == k)
{
printf("=================\n");
printf("%d ",head->key);
printf("%d\n",head->data);
printf("=================\n");
return head;
}else
{
head = head->next;
}
}
return NULL;
}
/*列印*/
void printList(Node* head){
while (head != NULL)
{
printf("%d ",head->key);
printf("%d\n",head->data);
printf("----------------\n");
head = head->next;
}
return ;
}
/*釋放*/
void freeList(Node* head){
Node* temp = head;
while (head != NULL)
{
head = head->next;
free(temp);
temp = head;
}
return ;
}
/*頭插*/
Node* inserNode2head(Node* head,Node* newp){
newp->next = head;
head = newp;
return head;
}
/*l尾插*/
void inserNodeAfter(Node* head,int k,Node* newp){
Node* kp = findList(head,k);
if(!kp){
printf("key not found!\n");
return ;
}
newp->next = kp->next;
kp->next = newp;
return ;
}
int main(int argc, char const *argv[])
{
Node* head = NULL;
Node* newp = NULL;
newp = malloc(sizeof(Node));
newp->key = 12;
newp->data = 12;
newp->next = NULL;
head = createList(head);
inserNodeAfter(head,2,newp);
head = inserNode2head(head,newp);
printf("______________________\n");
printList(head);
findList(head,3);
freeList(head);
return 0;
}
uj5u.com熱心網友回復:
列印鏈表到查找key值節點位置就從頭開始重復列印啊uj5u.com熱心網友回復:
newp->next = NULL; ====》》如果是頭插,這里應該是 head->next = NULL;newp->next = head; ===>>> 如果是尾插這里應該是這 樣 head->next = newp;
head = newp;
你這個鏈表整個都有問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71305.html
標籤:C語言
上一篇:c++新手求助
下一篇:坦克大戰素材
