要在單連結串列的最後插入節點,需要提及以下兩種情況。
如果滿足條件(head == NULL
)。 因此,只需要在C語言中使用malloc
語句為新節點分配空間。資料和節點的連結部分通過使用以下語句來設定。
ptr->data = item;
ptr -> next = NULL;
因為,ptr
是插入連結串列中的唯一節點,因此需要使連結串列的頭指標指向這個新節點,通過使用以下語句來完成。
Head = ptr
如果條件head = NULL
失敗,因為head
不為null
。需要宣告一個臨時指標temp
才能遍歷連結串列。temp
指向連結串列的第一個節點。
temp = head
然後,使用以下語句遍歷整個連結串列:
while (temp -> next != NULL){
temp = temp -> next;
}
在迴圈結束時,temp
將指向連結串列的最後一個節點。 現在,為新節點分配空間,並將專案分配給其資料部分。 因為,新節點將成為連結串列的最後一個節點,因此新節點下一連結部分需要指向null
。 使temp
節點的下一連結部分(當前是連結串列的最後一個節點)指向新節點(ptr
)。
temp = head;
while (temp -> next != NULL)
{
temp = temp -> next;
}
temp->next = ptr;
ptr->next = NULL;
演算法
第1步:IF PTR = NULL
寫OVERFLOW
轉到第1步
[結束]
第2步:設定NEW_NODE = PTR
第3步:SET PTR = PTR - > NEXT
第4步:設定NEW_NODE - > DATA = VAL
第5步:設定NEW_NODE - > NEXT = NULL
第6步:設定PTR = HEAD
第7步:重複第8步,同時PTR - > NEXT != NULL
第8步:SET PTR = PTR - > NEXT
[迴圈結束]
第9步:SET PTR - > NEXT = NEW_NODE
第10步:退出
C語言範例程式碼 -
#include<stdio.h>
#include<stdlib.h>
void lastinsert(int);
struct node
{
int data;
struct node *next;
};
struct node *head;
void main()
{
int choice, item;
do
{
printf("\nEnter the item which you want to insert?\n");
scanf("%d", &item);
lastinsert(item);
printf("\nPress 0 to insert more ?\n");
scanf("%d", &choice);
} while (choice == 0);
}
void lastinsert(int item)
{
struct node *ptr = (struct node*)malloc(sizeof(struct node));
struct node *temp;
if (ptr == NULL)
{
printf("\nOVERFLOW");
}
else
{
ptr->data = item;
if (head == NULL)
{
ptr->next = NULL;
head = ptr;
printf("\nNode inserted");
}
else
{
temp = head;
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = ptr;
ptr->next = NULL;
printf("\nNode inserted");
}
}
}
執行上面程式碼,得到類似下面的結果 -
Enter the item which you want to insert?
12
Node inserted
Press 0 to insert more ?
0
Enter the item which you want to insert?
23
Node inserted
Press 0 to insert more ?
2