日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++鏈表節點的添加和刪除介紹_C 語言

作者:與C決戰的小蘿卜頭 ? 更新時間: 2022-03-26 編程語言

前言

鏈表是一種動態的數據結構,因為在創建鏈表時,不需要知道鏈表的長度,只需要對指針進行操作。

1. 節點的創建

鏈表的節點包括兩部分,分別是:數據域和(指向下一個節點的)指針域。

struct Node {
	int data;
	struct Node* next;
};

2. 鏈表的定義

struct Node* createList() {
	//創建一個指針來表示表頭
	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
	headNode->next = NULL;
	return headNode;
}

3. 創建節點

struct Node* createNode(int data) {
	//創建一個新的指針節點
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	//結構體變量初始化
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}

4. 節點的插入

節點的插入分為三種:頭插法、尾插法、在鏈表中間插入節點。

?4.1 頭插法

頭插法,顧名思義就是在鏈表的第一個節點插入一個節點。

解決方法:讓新插入的節點的next指針指向鏈表的頭結點即可。

void insertNodeByHead(struct Node* headNode, int data) {
	struct Node* newNode = createNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}

?4.2 尾插法

尾插法,顧名思義就是在鏈表的末尾增加一個節點。

解決思路:首先找到鏈表的最后一個節點;然后讓最后的節點的next指針指向要插入的這個節點,插入的節點的next指針指向NULL即可。

void insertNodeByTail(struct Node* headNode, int data) {
	struct Node* newNode = createNode(data);
	while (headNode->next != NULL)
	{
		headNode = headNode->next;//找到最后一個節點
	}
	headNode->next = newNode;
	newNode->next = NULL;
}

?4.3 插入中間節點

插入中間節點:即在數據為 i 的節點后面添加新的節點。

解決思路:首先判斷數據為?i 的節點posNode是否在鏈表中存在;然后從第一個節點開始查找節點posNode。找到后就讓插入的節點的next指針指向posNode的下一個節點,posNode的next指針指向新插入的節點即可。

void insertNodeByCenter(struct Node* headNode, int data, int i) {
	struct Node* posNode = headNode;
	/*struct Node* posNodeFront = headNode;*/
	struct Node* newNode = createNode(data);
	if (posNode == NULL) {
		printf("無法查找此數據,鏈表為空\n");
	}
	else {
		while (posNode->data != i) {
			posNode = posNode->next;//前面位置到達了后面節點的位置
			/*posNode = posNodeFront->next;*///后面位置變成了原來位置的下一個
			if (posNode == NULL) {
				printf("未找到此數據\n");
				break;
			}
		}
		newNode->next = posNode->next;
		posNode->next = newNode;
	}
}

?總結

原文鏈接:https://blog.csdn.net/qq_47635065/article/details/122388071

欄目分類
最近更新