1. 程式人生 > >無頭單鏈表的插入刪除問題

無頭單鏈表的插入刪除問題

對於單鏈表的插入刪除問題,在之前的文章中已經介紹過,今天要介紹的是無頭單鏈表的插入和刪除問題。這裡所指的無頭單鏈表指的是假設我們只知道單鏈表的某個部分,而不是全部,要對其進行插入和刪除操作,如下圖:

那麼,對於這種的單鏈表,我們如何對其進行插入和刪除操作呢?首先我們來看無頭單鏈表的插入,如果我們要在pos的後面插入一個結點,則只需改變pos和newNode的next的指向即可,如下圖:

程式碼如下:

void InsertNoOrderBack(List *pos, int data)
{
	List *newNode = CreateNode(data);
	newNode->next = pos->next;
	pos->next = newNode;
}			

如果要在pos的前面插入一個結點,則先讓newNode的data等於pos的data,然後再改變pos和newNode的next域。如圖:

程式碼如下:

void InsertNoOrderList(List *pos, int data)
{
	List *newNode = CreateNode(data);
	newNode->data = pos->data;
	newNode->next = pos->next;
	pos->data = data;
	pos->next = newNode;
}

如果要刪除pos結點,也是很容易的,即先用一個變數del標記pos的next域,再將del的資料覆蓋pos位置。如圖:

程式碼如下:

void RemoveNoOrderList(List *pos)
{
	List *del = pos->next;
	pos->data = del->data;
	pos->next = del->next;
	free(del);
}