直接上代码了。
// Link.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h> //malloc函数
using namespace std;
typedef int dataType;
typedef struct ListNode {
dataType data;
ListNode* next;
}Node,*PNode;
//创建链表
PNode createList() {
PNode head = (PNode)malloc(sizeof(Node));
if (head == NULL) {
printf("分配地址失败!\n");
exit(-1);
}
int Nodenum;
printf("请输入节点的个数:");
scanf_s("%d", &Nodenum);
PNode tail = head;
tail->next = NULL;
for (int i = 0; i < Nodenum; i++) {
PNode newNode = (PNode)malloc(sizeof(Node));
if (newNode == NULL) {
printf("新分配地址失败!");
exit(-1);
}
int val;
printf("请输入第%d节点的数据:",i+1);
scanf_s("%d", &val);
newNode->data = val;
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
printf("链表创建成功!\n");
return head;
}
//输出链表
void printLink(PNode head) {
if (head->next == NULL) {
printf("链表为空!\n");
exit(-1);
}
PNode p= head->next;
while (p != NULL) {
printf("节点数据是:%d--->", p->data);
p = p->next;
}
printf("\n");
}
//将数据插入链表
//辅助函数,新建一个节点
PNode createNewNode(dataType data) {
PNode newNode = (PNode)malloc(sizeof(Node));
if (newNode == NULL) {
printf("新分配地址失败!");
exit(-1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//头插法
PNode headInsertNode(PNode head,dataType data) {
PNode newNode = createNewNode(data);
newNode->next = head->next;
head->next = newNode;
return head;
}
//尾插法
void tailInsertNode(PNode head, dataType data) {
PNode newNode = createNewNode(data);
PNode tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = newNode;
}
//删除指定的节点
void deleteNode(PNode head,dataType data) {
if (head->next == NULL) {
printf("链表为空!");
exit(-1);
}
PNode p1 = head;
PNode p2 = head->next;
while (p2->data != data && p2 != NULL) {
p1 = p2;
p2 = p2->next;
}
if (p2 == NULL) {
printf("%d不在链表中", data);
exit(-1);
}
p1->next = p2->next;
free(p2);
}
//查找指定的元素的位置
int searchNode(PNode head, dataType data) {
if (head->next == NULL) {
printf("链表为空!");
exit(-1);
}
PNode p1 = head;
PNode p2 = head->next;
int Index = 1;
while (p2->data != data && p2 != NULL) {
p1 = p2;
p2 = p2->next;
Index++;
}
if (p2 == NULL) {
printf("%d不在链表中", data);
exit(-1);
}
return Index;
}
//删除整个链表
void deleteLink(PNode head) {
if (head->next == NULL) {
printf("链表为空!");
exit(-1);
}
PNode tmp, p = head->next;
while (p != NULL) {
tmp = p->next;
free(p);
p = tmp;
}
head->next = NULL;
}
int main()
{
PNode head = createList();
printLink(head);
//head=headInsertNode(head, 40);
//tailInsertNode(head,40);
//deleteNode(head, 30);
//tailInsertNode(head, 50);
//printLink(head);
//printf("%d在第%d个节点!\n", 10, searchNode(head, 10));
deleteLink(head);
printLink(head);
return 0;
}