单向链表的创建、显示与删除
#include<iostream>
using namespace std;
typedef struct Node *PtrToNode;
//定义指向结构体node的指针为PtrToNode
//其中*PtrToNode就是Node,所以PtrToNode就是指向Node的指针
//typedef PtrToNode Position; Position也是指向Node的指针
//struct LNode *next;和上一行的是同样的含义
struct Node {
int data;
PtrToNode Next;
};
typedef PtrToNode List;
//严蔚敏版单链表
//typedef struct LNode {
// int data;
// struct LNode *next;
//}LNode,*LinkList;
void free_list(PtrToNode head)//删除链表
{
PtrToNode pointer;
while (head != NULL)
{
pointer = head;
head = head->Next;
free(pointer);
}
cout << "成功删除链表" << endl;
}
void show_list(PtrToNode head)//显示链表
{
PtrToNode pointer;
pointer = head->Next;
while (pointer)
{
cout << pointer->data << endl;
pointer = pointer->Next;
}
}
int main()
{
int m, k;//链表长度为n,寻找第k小结点;
PtrToNode p, head, pre;
head = (PtrToNode)malloc(sizeof(struct Node));//可以连等//这种东西一定要放在main函数中
//malloc分配一个结构体这么大的内存 自动返回为void类型的指针,现在强制转为PtrToNode类型的指针,其地址给p,同时p的存储类型为PtrToNode;
cout << "请输入链表长度及寻找第几小结点" << endl;
cin >> m >> k;
p = head;
for (int i = 0; i < m; i++)
{
pre = (PtrToNode)malloc(sizeof(struct Node));
pre->Next = NULL;
cin >> pre->data;
p->Next = pre;//把结构体pre指针指向的地址赋给结构体指针p所指向的结构的next区域
p = pre;//现在最后一个结点p为pre;因为p总是该链表当前最后一个结点,相当于一个迭代;
}//成功创建链表
show_list(head);
free_list(head);
system("pause");
}