链表的学习(2)
程序员文章站
2022-03-11 21:49:03
...
实现的链表操作:
1、指定位置删除和插入。
2、Merge两个链表
代码:
/*
Name: LinkedList
Author: Bryant_xw
Date: 2018-09-27-11.11.53
*/
#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}Node,Linklist;
void tail_insert(Linklist *L, int n)
{
int num;
Node* temp = L;
printf("Please Input %d nums: ",n);
for(int i =0 ; i < n; i++)
{
scanf("%d",&num);
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->next = NULL;
new_node->data = num;
temp->next = new_node;
temp = new_node;
}
temp->next = NULL;
}
bool delete_node(Linklist *L, int pos) //删除第pos个结点
{
int i = 0;
Node* p = L;
while(i < pos-1 && p->next)
{
p = p->next;
i++;
}
//删除的位置不合理
if(p->next==NULL || i>pos-1)
return false;
Node* tmp = p->next;
p->next = tmp->next;
free(tmp);
tmp = NULL;
return true;
}
//指定位置插入元素num
bool InsertPos(Linklist* L, int pos , int num)
{
Node* p = L;
int i = 0;
Node* new_node =(Node*)malloc(sizeof(Node));
new_node->data = num;
//new_node->next = NULL;
while(i < pos-1 && p->next)
{
p = p->next;
i++;
}
if(!p || i>pos-1)
return false;
new_node->next = p->next;
p->next = new_node;
return true;
}
void MergeList(Linklist* L1, Linklist* L2, Linklist* L3)
{
//L1单增,L2单增
Node* p1 = L1->next;
Node*p2 = L2->next;
Node*p3 = L1;
L3 = L1;
while(p1 && p2)
{
if(p1->data <= p2->data)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
p3->next = p1 ? p1 : p2;
free(L2);
}
void Print(Linklist *L)
{
Node* p = L->next;
if(p)
{
printf("%d",p->data);
p = p->next;
}
while(p)
{
printf("->%d",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n,num;
Linklist *L = (Node*)malloc(sizeof(Node));
//------------------------------------------//
printf("Please Input Insert nums:");
scanf("%d",&n);
tail_insert(L,n);
printf("LinkList Contains(tail_insert):");
Print(L);
//------------------------------------------//
printf("Please Input delete pos:");
scanf("%d",&n);
if(delete_node(L,n))
Print(L);
else
printf("delete pos is error!\n");
//------------------------------------------//
printf("Please Input insert pos and pos's num:");
scanf("%d%d",&n,&num);
if(InsertPos(L,n,num))
Print(L);
else
printf("insert pos is error!\n");
//------------------------------------------//
return 0;
}
//int main(){
// int n;
// Linklist *L1 = (Node*)malloc(sizeof(Node));
// Linklist *L2 = (Node*)malloc(sizeof(Node));
// Linklist* L3;
// //-------------------------------------------//
// printf("Please Input Insert nums:");
// scanf("%d",&n);
// tail_insert(L1,n);
// printf("LinkList1 Contains(tail_insert):");
// Print(L1);
// //-------------------------------------------//
// printf("Please Input Insert nums:");
// scanf("%d",&n);
// tail_insert(L2,n);
// printf("LinkList2 Contains(tail_insert):");
// Print(L2);
// //-------------------------------------------//
// printf("MergeList LinkList3 Contains(tail_insert):");
// MergeList(L1,L2,L3);
// Print(L1);
// return 0;
//}