創建鏈表-頭插法和尾插法

1,頭插法和尾插法

新增節點插入的位置不同,頭插法是在頭結點之後,尾插法只在鏈表末尾。

2,代碼

#include <stdio.h>

typedef struct ListNode
{
	int data;
	struct ListNode *next;
}ListNode, *pListNode;

void addHead_createList(ListNode **head, int n) //頭插法
{
	int i;
	*head = (ListNode *)malloc(sizeof(ListNode));
	(*head) ->next = NULL;
	for(i = 0; i < n; i++)
	{
		ListNode *p = (ListNode *)malloc(sizeof(ListNode));
		scanf("%d", &(p->data));
		p->next = (*head)->next;
		(*head)->next = p;
	}
}

void addTail_createList(ListNode **head, int n) //尾插法
{
	int i;
	ListNode *r;
	*head = (ListNode *)malloc(sizeof(ListNode));
	(*head)->next = NULL;
	r = *head;
	for(i = 0; i < n; i++)
	{
		ListNode *p = (ListNode *)malloc(sizeof(ListNode));
		scanf("%d", &(p->data));
		p->next =NULL;
		r->next = p;
		r = p;		
	}
}
void showList(ListNode **head)
{
	ListNode *p = (*head)->next;
	while(p)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}

void destoryList(ListNode **head)
{
	ListNode *p = (*head)->next;
	ListNode *tmp;
	while(p)
	{
		tmp = p;
		p = p->next;
		free(tmp);	
	}
	(*head)->next = NULL;	
}

int main()
{
	int n;
	ListNode *head = NULL;
	scanf("%d", &n);
	
	addHead_createList(&head, n);
	showList(&head);
	destoryList(&head);
	addTail_createList(&head, n);
	showList(&head);
	destoryList(&head);

	return 0;
}

3,結果

4,注意

這裏有個陷阱,函數外部(比如addHead_createList)外需要使用head來輸出鏈表內容,創建的時候傳值應該是指針的指針(ListNode **head),否則外部引用不到,出段錯誤。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章