#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
LinkList CreateList()
{
LinkList pHead = (LinkList)malloc(sizeof(Node));
if(NULL==pHead)
{
exit(-1);
}
LinkList pTail = pHead;//pTail总是指向最后一个
pTail->next=NULL;
int len;
scanf("%d",&len);
pHead->data = len;
while(len--)
{
int val;
scanf("%d",&val);
LinkList pNew=(LinkList)malloc(sizeof(Node));
if(NULL==pNew)
{
exit(-1);
}
pNew->data=val;
pNew->next = NULL;
pTail->next = pNew;
pTail = pNew;
}
return pHead;
}
void TraverseList(LinkList pHead)
{
LinkList pTail = pHead->next;
while(NULL!=pTail)
{
printf("%d\t",pTail->data);
pTail = pTail->next;
}
printf("\n");
}
//在pos位置后面插入值val
void InsertList(LinkList pHead,int val,int pos)
{
LinkList pTail = pHead->next;
int len = pHead->data;//头节点存放链表的长度
int i;
if(len<pos)
{
printf("要插入的位置大于链表总长度");
return ;
}
//移动指针,到pos-1位置
for(i=1;i<pos;i++)
{
pTail = pTail->next;
}
//要插入的节点
LinkList pNew = (LinkList)malloc(sizeof(Node));
pNew->data = val;
pNew->next = pTail->next;
pTail->next = pNew;
pHead->data = len+1;
}
//删除位置为pos的值,并返回删除的值
int DeleteList(LinkList pHead,int pos)
{
int i=0;
int len = pHead->data;
LinkList pTail = (LinkList)malloc(sizeof(Node));
pTail = pHead->next;
if(len<pos)
{
printf("要插入的位置大于链表总长度");
return -1;
}
//移动到指定位置pos-1
while(++i<pos)
{
pTail = pTail->next;
}
LinkList delNode = pTail->next;
pTail->next = delNode->next;
return delNode->data;
}
//返回链表的长度
int ListLength(LinkList pHead)
{
return pHead->data;
}
void ClearList(LinkList pHead)
{
pHead->data=0;
pHead->next=NULL;
}
int main()
{
LinkList pHead = (LinkList)malloc(sizeof(Node));
//创建链表
pHead = CreateList();
//遍历链表
TraverseList(pHead);
//插入节点
InsertList(pHead,10,2);
TraverseList(pHead);
//删除节点
DeleteList(pHead,2);
TraverseList(pHead);
//InitList(&linkList);
return 0;
}
数据结构——几种链表基本操作
最新推荐文章于 2024-08-20 17:16:26 发布