指定位置插入:
insert_pos_val(lk headNode, int pos, int val);

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode
{
int num;
LinkNode* next;
}Lk, * lk;
//初始化頭節點
lk init_headNode()
{
lk headNode = (lk)malloc(sizeof(Lk));
if (headNode == NULL)
{
return NULL;
}
headNode->next = NULL;
//指標遍歷輸出
lk endNode = headNode;
//輸入-1結束向鏈表賦值
int val = -1;
while (1)
{
printf("請輸入:\n");
scanf("%d", &val);
if (val == -1)
{
break;
}
lk newNode = (lk)malloc(sizeof(Lk));
newNode->num = val;
newNode->next = NULL;
//尾插法
endNode->next = newNode;
endNode = newNode;
}
return headNode;
}
//遍歷輸出
void foreach_linkList(lk headNode)
{
if (headNode == NULL)
{
return;
}
lk curNode = headNode->next;
while (curNode)
{
printf("%d\n", curNode->num);
curNode = curNode->next;
}
}
//指定位置插入一個值
void insert_pos_val(lk headNode, int pos, int val)
{
if (headNode == NULL)
{
return;
}
lk prveNode = headNode;
lk curNode = headNode->next;
//索引
int index = 0;
while (curNode)
{
if (index == pos)
{
break;
}
prveNode = curNode;
curNode = curNode->next;
index++;
}
if (pos > index)
{
printf("無法插入當前位置\n");
return;
}
lk newNode = (lk)malloc(sizeof(Lk));
newNode->num = val;
newNode->next = NULL;
prveNode->next = newNode;
newNode->next = curNode;
}
int main()
{
lk headNode = init_headNode();
printf("列印輸出鏈表:\n");
foreach_linkList(headNode);
printf("插入后列印輸出鏈表:\n");
insert_pos_val(headNode, 10, 521);
foreach_linkList(headNode);
return 0;
}

指定位置洗掉:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode
{
int num;
LinkNode* next;
}Lk, * lk;
//初始化頭節點
lk init_headNode()
{
lk headNode = (lk)malloc(sizeof(Lk));
if (headNode == NULL)
{
return NULL;
}
headNode->next = NULL;
//指標遍歷輸出
lk endNode = headNode;
//輸入-1結束向鏈表賦值
int val = -1;
while (1)
{
printf("請輸入:\n");
scanf("%d", &val);
if (val == -1)
{
break;
}
lk newNode = (lk)malloc(sizeof(Lk));
newNode->num = val;
newNode->next = NULL;
//尾插法
endNode->next = newNode;
endNode = newNode;
}
return headNode;
}
//遍歷輸出
void foreach_linkList(lk headNode)
{
if (headNode == NULL)
{
return;
}
lk curNode = headNode->next;
while (curNode)
{
printf("%d\n", curNode->num);
curNode = curNode->next;
}
}
//指定位置洗掉
void delete_pos_val(lk headNode, int pos, int val)
{
if (headNode == NULL)
{
return;
}
lk prveNode = headNode;
lk curNode = headNode->next;
//索引:跟據curNode位置移動
int index = 1;
while (curNode)
{
if (index == pos)
{
break;
}
prveNode = curNode;
curNode = curNode->next;
index++;
}
if (pos > index)
{
printf("沒有當前元素可供洗掉\n");
return;
}
//改變prveNode指標指向
prveNode->next = curNode->next;
//釋放curNode節點在堆區開辟的資料
free(curNode);
}
int main()
{
lk headNode = init_headNode();
printf("列印輸出鏈表:\n");
foreach_linkList(headNode);
printf("洗掉后列印輸出鏈表:\n");
delete_pos_val(headNode, 2, 521);
foreach_linkList(headNode);
return 0;
}

逆置鏈表方式:只對當前鏈表進行操作,不借用新鏈表



#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode
{
int num;
LinkNode* next;
}Lk, * lk;
//初始化頭節點
lk init_headNode()
{
lk headNode = (lk)malloc(sizeof(Lk));
if (headNode == NULL)
{
return NULL;
}
headNode->next = NULL;
//指標遍歷輸出
lk endNode = headNode;
//輸入-1結束向鏈表賦值
int val = -1;
while (1)
{
printf("請輸入:\n");
scanf("%d", &val);
if (val == -1)
{
break;
}
lk newNode = (lk)malloc(sizeof(Lk));
newNode->num = val;
newNode->next = NULL;
//尾插法
endNode->next = newNode;
endNode = newNode;
}
return headNode;
}
//遍歷輸出
void foreach_linkList(lk headNode)
{
if (headNode == NULL)
{
return;
}
lk curNode = headNode->next;
while (curNode)
{
printf("%d\n", curNode->num);
curNode = curNode->next;
}
}
//逆置鏈表
void reverse_pos_val(lk headNode)
{
if (headNode == NULL)
{
return;
}
lk prveNode = headNode;
lk curNode = prveNode->next;
lk nextNode = curNode->next;
//第一步:
prveNode->next = NULL;
curNode->next = NULL;
//第二步到第五步
while (nextNode != NULL)
{
//輔助指標往后移動
prveNode = curNode;
curNode = nextNode;
nextNode = nextNode->next;
//移動過后改變鏈表中curNode節點next指標指向
curNode->next = prveNode;
}
//第六步
headNode->next = curNode;
}
int main()
{
lk headNode = init_headNode();
printf("列印輸出鏈表:\n");
foreach_linkList(headNode);
printf("逆置后列印輸出鏈表:\n");
reverse_pos_val(headNode);
foreach_linkList(headNode);
return 0;
}

方式二:準備一個新鏈表,取出之前鏈表中的元素,用頭插法的方式插入新準備的鏈表中,這里不做演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/262959.html
標籤:其他
上一篇:MATLAB輕松實作三維影像自動旋轉、顏色漸變、自動保存為GIF
下一篇:IPSec基礎知識
