要在列表中的指定節點之後插入節點,需要跳過所需數量的節點以便到達目標節點,然後根據需要調整指標。
為此,請參考使用以下步驟。
ptr = (struct node *)malloc(sizeof(struct node));
使用指標temp
遍歷列表以跳過所需數量的節點以到達指定節點。temp=head;
for(i=0;i<loc;i++)
{
temp = temp->next;
// the temp will be null if the list doesn't last long up to mentioned location
if(temp == NULL)
{
return;
}
}
temp
將指向for
迴圈結束時的指定節點。要在此節點之後插入新節點,因此需要在此處調整ptr
指標。使ptr
的下一個指標指向temp
的下一個節點。ptr -> next = temp -> next;
ptr
的prev
指標指向temp
。ptr -> prev = temp;
使temp
指標指向新節點ptr
。temp -> next = ptr;
使temp
節點的pre
指標指向新節點。temp -> next -> prev = ptr;
演算法
第1步:IF PTR = NULL
提示:OVERFLOW
轉到第15步
[IF結束]
第2步:設定NEW_NODE = PTR
第3步:SET PTR = PTR - > NEXT
第4步:設定NEW_NODE - > DATA = VAL
第5步:SET TEMP = START
第6步:SET I = 0
第7步:重複第8步到第10步直到 I
第8步:SET TEMP = TEMP - > NEXT
第9步:如果TEMP = NULL
第10步:提示 「比所需的元素少」
轉到第15步
[結束]
[迴圈結束]
第11步:設定NEW_NODE - > NEXT = TEMP - > NEXT
第12步:設定NEW_NODE - > PREV = TEMP
第13步:設定TEMP - > NEXT = NEW_NODE
第14步:設定TEMP - > NEXT - > PREV = NEW_NODE
第15步:退出
示意圖如下 -
使用C語言實現的示意程式碼 -
#include<stdio.h>
#include<stdlib.h>
void insert_specified(int);
void create(int);
struct node
{
int data;
struct node *next;
struct node *prev;
};
struct node *head;
void main()
{
int choice, item, loc;
do
{
printf("Enter the item which you want to insert?\n");
scanf("%d", &item);
if (head == NULL)
{
create(item);
}
else
{
insert_specified(item);
}
printf("Press 0 to insert more ?\n");
scanf("%d", &choice);
} while (choice == 0);
}
void create(int item)
{
struct node *ptr = (struct node *)malloc(sizeof(struct node));
if (ptr == NULL)
{
printf("OVERFLOW");
}
else
{
if (head == NULL)
{
ptr->next = NULL;
ptr->prev = NULL;
ptr->data = item;
head = ptr;
}
else
{
ptr->data = item;printf("Press 0 to insert more ?\n");
ptr->prev = NULL;
ptr->next = head;
head->prev = ptr;
head = ptr;
}
printf("Node Inserted\n");
}
}
void insert_specified(int item)
{
struct node *ptr = (struct node *)malloc(sizeof(struct node));
struct node *temp;
int i, loc;
if (ptr == NULL)
{
printf("OVERFLOW\n");
}
else
{
printf("Enter the location\n");
scanf("%d", &loc);
temp = head;
for (i = 0;i < loc;i++)
{
temp = temp->next;
if (temp == NULL)
{
printf("can't insert\n");
return;
}
}
ptr->data = item;
ptr->next = temp->next;
ptr->prev = temp;
temp->next = ptr;
temp->next->prev = ptr;
printf("Node Inserted\n");
}
}
執行上面範例程式碼,得到以下結果 -
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?
90
Node Inserted
Press 0 to insert more ?
2