数据结构与算法分析----单链表

61.耶斯莫拉

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef int ElemType;

typedef struct ListNode{
	ElemType data;
	struct ListNode *next;
}LinkNode,*LinkList;
//购买节点
ListNode *BuyNode(){
	ListNode *s = (ListNode *)malloc(sizeof(ListNode));
	if (s == NULL) exit(1);
	memset(s, 0, sizeof(ListNode));
	return s;
}
//释放节点
void FreeNode(ListNode *s){
	free(s);
}
//初始化单链表
ListNode *Init_LinkList(){
	ListNode *s = BuyNode();
	s->next = NULL;
	return s;
}
//打印链表
void PrintList(LinkList L){
	assert(L != NULL);
	ListNode *p=L->next ;
	while (p != NULL){
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
}
//查询链表
ListNode  * FindValue(LinkList L,ElemType val){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		if (p->data == val){
			return p;
		}
		p = p->next;
	}
	return NULL;
}
//返回当前节点的前一个节点
ListNode  * FindValue_Prev(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *prev = L;
	ListNode *p = L->next;
	while (p != NULL&&p->data != val){
		prev = p;
		p = p->next;
	}
	if (p == NULL){
		prev = NULL;

	}
	return prev;
}

//按位置查询节点
ListNode  *FindValue_index(LinkList L, int  pos){
	assert(L != NULL);
	ListNode *p = L->next;
	int i = 1;
	if (pos <= 0){
		cout << "位置信息不合法!" << endl;
		return NULL;
	}
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	return p;

}

//按位置查询前驱节点
ListNode  *FindValue_Prev_index(LinkList L, int  pos){
	assert(L != NULL);
	int i = 1;
	if (pos < 1)  return NULL;
	ListNode *p = L->next;
	ListNode *prev = L;
	while (p != NULL&&i < pos){
		prev = p;
		p = p->next;
		i++;
	}
	if (p == NULL){//这一步不可省略呀!!
		prev = NULL;
	}
	return prev;
}

//在指定节点插入元素
bool Insert_Next(LinkList L, ListNode *ptr, ElemType val){
	assert(ptr != NULL);
	if (ptr == NULL)  return false;
	LinkNode *r; 
	r = BuyNode();

	r->data = val;
	r->next = ptr->next;
	ptr->next = r;
	return true;
}
//头插法
void Push_Front(LinkList L, ElemType val){
	assert(L != NULL);
	Insert_Next(L,L, val);
}
//尾插法
void Push_Back(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p;
	p = L;
	while (p->next != NULL){
		p = p->next;
	}
	Insert_Next(L, p, val);
	
}
///
int main(){
	ListNode *head = Init_LinkList();
	for (int i = 0; i < 15; i++){
		Push_Back(head, i);
	}
	PrintList(head);
	
}

2.妈的  爷自己写的有这么不堪吗  非得debug滴这么久  算了  上代码!

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef int ElemType;

typedef struct ListNode{
	ElemType data;
	struct ListNode *next;
}LinkNode,*LinkList;
//购买节点
ListNode *BuyNode(){
	ListNode *s = (ListNode *)malloc(sizeof(ListNode));
	if (s == NULL) exit(1);
	memset(s, 0, sizeof(ListNode));
	return s;
}
//释放节点
void FreeNode(ListNode *s){
	free(s);
}
//初始化单链表
ListNode *Init_LinkList(){
	ListNode *s = BuyNode();
	s->next = NULL;
	return s;
}
//打印链表
void PrintList(LinkList L){
	assert(L != NULL);
	ListNode *p=L->next ;
	while (p != NULL){
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
}
//查询链表
ListNode  * FindValue(LinkList L,ElemType val){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		if (p->data == val){
			return p;
		}
		p = p->next;
	}
	return NULL;
}
//返回当前节点的前一个节点
ListNode  * FindValue_Prev(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *prev = L;
	ListNode *p = L->next;
	while (p != NULL&&p->data != val){
		prev = p;
		p = p->next;
	}
	if (p == NULL){
		prev = NULL;

	}
	return prev;
}

//按位置查询节点
ListNode  *FindValue_index(LinkList L, int  pos){
	assert(L != NULL);
	ListNode *p = L->next;
	int i = 1;
	if (pos <= 0){
		cout << "位置信息不合法!" << endl;
		return NULL;
	}
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	return p;

}

//按位置查询前驱节点
ListNode  *FindValue_Prev_index(LinkList L, int  pos){
	assert(L != NULL);
	int i = 1;
	if (pos < 1)  return NULL;
	ListNode *p = L->next;
	ListNode *prev = L;
	while (p != NULL&&i < pos){
		prev = p;
		p = p->next;
		i++;
	}
	if (p == NULL){//这一步不可省略呀!!
		prev = NULL;
	}
	return prev;
}

//在指定节点插入元素
bool Insert_Next(LinkList L, ListNode *ptr, ElemType val){
	assert(ptr != NULL);
	if (ptr == NULL)  return false;
	LinkNode *r; 
	r = BuyNode();

	r->data = val;
	r->next = ptr->next;
	ptr->next = r;
	return true;
}
//头插法
void Push_Front(LinkList L, ElemType val){
	assert(L != NULL);
	Insert_Next(L,L, val);
}
//尾插法
void Push_Back(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p;
	p = L;
	while (p->next != NULL){
		p = p->next;
	}
	Insert_Next(L, p, val);
	
}
//在指定位置插入节点
bool Insert_Pos(LinkList L, int pos, int val){
	assert(L != NULL);
	if (pos < 1) return false;
	int i = 1;
	ListNode *p; 
	p = L;
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	if (p != NULL){
		Insert_Next(L, p, val);
		return true;
	}
	else if (p == NULL&&i + 1 == pos){
		Insert_Next(L, p, val);
		return true;
	}
	else{
		cout << "插入位置不合法!" << endl;
		return false ;
	}

} 
//删除单链表中的元素
bool Delete_List(LinkList L, ListNode *ptr){
	assert(L != NULL);
	if (ptr == NULL)  return false;
	ptr->next = ptr->next->next;
	return true;
}
//从头部删除单链表的元素
void Pop_Front(LinkList L){
	assert(L != NULL);
	ListNode *p = L;
	if (p!= NULL){
		Delete_List(L, p);
	}
	else cout << "链表为空!" << endl;
}
//单链表尾删法
void Pop_Back(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next,*s=L;
	ListNode *pre = L;
	while (p->next != NULL){
		pre = p;
		p = p->next;
	}
	Delete_List(pre, s);
	//free(pre);
}
///
int main(){
	ListNode *head = Init_LinkList();
	
	for (int i = 1; i <= 15; i++){
		Push_Back(head, i);
	}
	PrintList(head);
	Pop_Back(head);
	//Pop_Front(head);
	PrintList(head);
	

	/*
	ListNode  *p = FindValue_index(head, 5);
	cout << p->data << endl;
	ListNode  *p = FindValue(head, 14);
	cout << p->data  << endl;
	while (1){
		int tag, pos, val;
		cout << "请输入插入位置和插入数值" << endl;
		cin >> pos >> val;
		if (val == -1)  break;
		tag=Insert_Pos(head, pos, val);
		PrintList(head);

	}
	*/
	cout << "时光作渡,眉目成书,从此深情不被辜负!" << endl;
}

2.呜呜呜代码丢失了  好惨!

这是临走前打印出来的  羽生结弦 俺爱你

3.昨天代码敲得脑子然乎了  乱写尾插法 现在更新一下改正的错误 并加一个时间复杂度为1的杉树所有值的函数

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef int ElemType;

typedef struct ListNode{
	ElemType data;
	struct ListNode *next;
}LinkNode, *LinkList;
//购买节点
ListNode *BuyNode(){
	ListNode *s = (ListNode *)malloc(sizeof(ListNode));
	if (s == NULL) exit(1);
	memset(s, 0, sizeof(ListNode));
	return s;
}
//释放节点
void FreeNode(ListNode *s){
	free(s);
}
//初始化单链表
ListNode *Init_LinkList(){
	ListNode *s = BuyNode();
	s->next = NULL;
	return s;
}
//打印链表
void PrintList(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
}
//查询链表
ListNode  * FindValue(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		if (p->data == val){
			return p;
		}
		p = p->next;
	}
	return NULL;
}
//返回当前节点的前一个节点
ListNode  * FindValue_Prev(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *prev = L;
	ListNode *p = L->next;
	while (p != NULL&&p->data != val){
		prev = p;
		p = p->next;
	}
	if (p == NULL){
		prev = NULL;

	}
	return prev;
}

//按位置查询节点
ListNode  *FindValue_index(LinkList L, int  pos){
	assert(L != NULL);
	ListNode *p = L->next;
	int i = 1;
	if (pos <= 0){
		cout << "位置信息不合法!" << endl;
		return NULL;
	}
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	return p;

}

//按位置查询前驱节点
ListNode  *FindValue_Prev_index(LinkList L, int  pos){
	assert(L != NULL);
	int i = 1;
	if (pos < 1)  return NULL;
	ListNode *p = L->next;
	ListNode *prev = L;
	while (p != NULL&&i < pos){
		prev = p;
		p = p->next;
		i++;
	}
	if (p == NULL){//这一步不可省略呀!!
		prev = NULL;
	}
	return prev;
}

//在指定节点插入元素
bool Insert_Next(LinkList L, ListNode *ptr, ElemType val){
	assert(ptr != NULL);
	if (ptr == NULL)  return false;
	LinkNode *r;
	r = BuyNode();

	r->data = val;
	r->next = ptr->next;
	ptr->next = r;
	return true;
}
//头插法
void Push_Front(LinkList L, ElemType val){
	assert(L != NULL);
	Insert_Next(L, L, val);
}
//尾插法
void Push_Back(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p;
	p = L;
	while (p->next != NULL){
		p = p->next;
	}
	Insert_Next(L, p, val);

}
//在指定位置插入节点
bool Insert_Pos(LinkList L, int pos, int val){
	assert(L != NULL);
	if (pos < 1) return false;
	int i = 1;
	ListNode *p;
	p = L;
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	if (p != NULL){
		Insert_Next(L, p, val);
		return true;
	}
	else if (p == NULL&&i + 1 == pos){
		Insert_Next(L, p, val);
		return true;
	}
	else{
		cout << "插入位置不合法!" << endl;
		return false;
	}

}
//删除单链表中的元素
bool Delete_List(LinkList L, ListNode *ptr){
	assert(L != NULL);
	if (ptr == NULL)  return false;
	ptr->next = ptr->next->next;
	return true;
}
//从头部删除单链表的元素
void Pop_Front(LinkList L){
	assert(L != NULL);
	ListNode *p = L;
	if (p != NULL){
		Delete_List(L, p);
	}
	else cout << "链表为空!" << endl;
}
//单链表尾删法
void Pop_Back(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next, *s = L;
	ListNode *pre = L;
	while (p->next != NULL){
		pre = p;
		p = p->next;
	}
	Delete_List(L,pre);
	//free(pre);
}
void Swap(ElemType *a, ElemType *b){
	ElemType tmp= *a;
	*a = *b;
	*b = tmp;
}
//时间复杂度为O(1)的算法  删除所以值相等的元素
void Delete_All(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next, *pre = L;
	while (p != NULL){
		if (p->data != val){
			pre = pre->next;
			Swap(&(pre->data), &(p->data));
		}
		p = p->next;
	}
	while (pre->next != NULL) {
		Pop_Back(L);
	}
}

///
int main(){
	ListNode *head = Init_LinkList();
	ElemType arr[] = { 1, 23, 1, 45, 12, 456, 13};
	for (int i = 0; i < 7; i++){
		Push_Back(head, arr[i]);
	}
	PrintList(head);
	Delete_All(head, 12);
	PrintList(head);


	/*
	ListNode  *p = FindValue_index(head, 5);
	cout << p->data << endl;
	ListNode  *p = FindValue(head, 14);
	cout << p->data  << endl;
	while (1){
	int tag, pos, val;
	cout << "请输入插入位置和插入数值" << endl;
	cin >> pos >> val;
	if (val == -1)  break;
	tag=Insert_Pos(head, pos, val);
	PrintList(head);

	}
	*/
	cout << "时光作渡,眉目成书,从此深情不被辜负!" << endl;
}

3.好啦 带头节点的单链表操作就到此为止啦!

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef int ElemType;

typedef struct ListNode{
	ElemType data;
	struct ListNode *next;
}LinkNode, *LinkList;
//购买节点
ListNode *BuyNode(){
	ListNode *s = (ListNode *)malloc(sizeof(ListNode));
	if (s == NULL) exit(1);
	memset(s, 0, sizeof(ListNode));
	return s;
}
//释放节点
void FreeNode(ListNode *s){
	free(s);
}
//初始化单链表
ListNode *Init_LinkList(){
	ListNode *s = BuyNode();
	s->next = NULL;
	return s;
}
//打印链表
void PrintList(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
}
//查询链表
ListNode  * FindValue(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		if (p->data == val){
			return p;
		}
		p = p->next;
	}
	return NULL;
}
//返回当前节点的前一个节点
ListNode  * FindValue_Prev(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *prev = L;
	ListNode *p = L->next;
	while (p != NULL&&p->data != val){
		prev = p;
		p = p->next;
	}
	if (p == NULL){
		prev = NULL;

	}
	return prev;
}

//按位置查询节点
ListNode  *FindValue_index(LinkList L, int  pos){
	assert(L != NULL);
	ListNode *p = L->next;
	int i = 1;
	if (pos <= 0){
		cout << "位置信息不合法!" << endl;
		return NULL;
	}
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	return p;

}

//按位置查询前驱节点
ListNode  *FindValue_Prev_index(LinkList L, int  pos){
	assert(L != NULL);
	int i = 1;
	if (pos < 1)  return NULL;
	ListNode *p = L->next;
	ListNode *prev = L;
	while (p != NULL&&i < pos){
		prev = p;
		p = p->next;
		i++;
	}
	if (p == NULL){//这一步不可省略呀!!
		prev = NULL;
	}
	return prev;
}

//在指定节点插入元素
bool Insert_Next(LinkList L, ListNode *ptr, ElemType val){
	assert(ptr != NULL);
	if (ptr == NULL)  return false;
	LinkNode *r;
	r = BuyNode();

	r->data = val;
	r->next = ptr->next;
	ptr->next = r;
	return true;
}
//头插法
void Push_Front(LinkList L, ElemType val){
	assert(L != NULL);
	Insert_Next(L, L, val);
}
//尾插法
void Push_Back(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p;
	p = L;
	while (p->next != NULL){
		p = p->next;
	}
	Insert_Next(L, p, val);

}
//在指定位置插入节点
bool Insert_Pos(LinkList L, int pos, int val){
	assert(L != NULL);
	if (pos < 1) return false;
	int i = 1;
	ListNode *p;
	p = L;
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	if (p != NULL){
		Insert_Next(L, p, val);
		return true;
	}
	else if (p == NULL&&i + 1 == pos){
		Insert_Next(L, p, val);
		return true;
	}
	else{
		cout << "插入位置不合法!" << endl;
		return false;
	}

}
//删除单链表中的元素
bool Delete_List(LinkList L, ListNode *ptr){
	assert(L != NULL);
	if (ptr == NULL)  return false;
	ptr->next = ptr->next->next;
	return true;
}
//从头部删除单链表的元素
void Pop_Front(LinkList L){
	assert(L != NULL);
	ListNode *p = L;
	if (p != NULL){
		Delete_List(L, p);
	}
	else cout << "链表为空!" << endl;
}
//单链表尾删法
void Pop_Back(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next, *s = L;
	ListNode *pre = L;
	while (p->next != NULL){
		pre = p;
		p = p->next;
	}
	Delete_List(L,pre);
	//free(pre);
}
void Swap(ElemType *a, ElemType *b){
	ElemType tmp= *a;
	*a = *b;
	*b = tmp;
}
//时间复杂度为O(1)的算法  删除所以值相等的元素
void Delete_All(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next, *pre = L;
	while (p != NULL){
		if (p->data != val){
			pre = pre->next;
			Swap(&(pre->data), &(p->data));
		}
		p = p->next;
	}
	while (pre->next  != NULL) {
		Pop_Back(L);
	}
}
//清除函数--->只剩头节点
void ClearList(LinkList L){
	ListNode *p =L;
	while (p->next != NULL){
		Pop_Back(L);
	}
}
//摧毁函数--->头节点也清空
void DestoryList(LinkList L){
	assert(L != NULL);
	ClearList(L);

	free(L);
	cout << "破坏成功!" << endl;
}
///
int main(){
	ListNode *head = Init_LinkList();
	ListNode *p = head->next;
	ElemType arr[] = { 1, 23, 1, 45, 12, 456, 13};
	for (int i = 0; i < 7; i++){
		Push_Back(head, arr[i]);
	}
	PrintList(head);
	ClearList(head);
	cout << p;
	PrintList(head);


	/*
	ListNode  *p = FindValue_index(head, 5);
	cout << p->data << endl;
	ListNode  *p = FindValue(head, 14);
	cout << p->data  << endl;
	while (1){
	int tag, pos, val;
	cout << "请输入插入位置和插入数值" << endl;
	cin >> pos >> val;
	if (val == -1)  break;
	tag=Insert_Pos(head, pos, val);
	PrintList(head);

	}
	*/
	cout << "时光作渡,眉目成书,从此深情不被辜负!" << endl;
}

1.一直都知道在一个函数中定义变量的位置很重要  但是没有想到先定义也会出问题  保守起见  以后每次定义变量遵循用时定义  md搞我心态

这个时逆置后的结果 代码最后上吧 

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef int ElemType;

typedef struct ListNode{
	ElemType data;
	struct ListNode *next;
}LinkNode, *LinkList;
//购买节点
ListNode *BuyNode(){
	ListNode *s = (ListNode *)malloc(sizeof(ListNode));
	if (s == NULL) exit(1);
	memset(s, 0, sizeof(ListNode));
	return s;
}
//释放节点
void FreeNode(ListNode *s){
	free(s);
}
//初始化单链表
ListNode *Init_LinkList(){
	ListNode *s = BuyNode();
	s->next = NULL;
	return s;
}
//打印链表
void PrintList(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		cout << p->data << "   ";
		p = p->next;
	}
	cout << endl;
}
//查询链表
ListNode  * FindValue(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next;
	while (p != NULL){
		if (p->data == val){
			return p;
		}
		p = p->next;
	}
	return NULL;
}
//返回当前节点的前一个节点
ListNode  * FindValue_Prev(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *prev = L;
	ListNode *p = L->next;
	while (p != NULL&&p->data != val){
		prev = p;
		p = p->next;
	}
	if (p == NULL){
		prev = NULL;

	}
	return prev;
}

//按位置查询节点
ListNode  *FindValue_index(LinkList L, int  pos){
	assert(L != NULL);
	ListNode *p = L->next;
	int i = 1;
	if (pos <= 0){
		cout << "位置信息不合法!" << endl;
		return NULL;
	}
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	return p;

}

//按位置查询前驱节点
ListNode  *FindValue_Prev_index(LinkList L, int  pos){
	assert(L != NULL);
	int i = 1;
	if (pos < 1)  return NULL;
	ListNode *p = L->next;
	ListNode *prev = L;
	while (p != NULL&&i < pos){
		prev = p;
		p = p->next;
		i++;
	}
	if (p == NULL){//这一步不可省略呀!!
		prev = NULL;
	}
	return prev;
}

//在指定节点插入元素
bool Insert_Next(LinkList L, ListNode *ptr, ElemType val){
	assert(ptr != NULL);
	if (ptr == NULL)  return false;
	LinkNode *r;
	r = BuyNode();

	r->data = val;
	r->next = ptr->next;
	ptr->next = r;
	return true;
}
//头插法
void Push_Front(LinkList L, ElemType val){
	assert(L != NULL);
	Insert_Next(L, L, val);
}
//尾插法
void Push_Back(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p;
	p = L;
	while (p->next != NULL){
		p = p->next;
	}
	Insert_Next(L, p, val);

}
//在指定位置插入节点
bool Insert_Pos(LinkList L, int pos, int val){
	assert(L != NULL);
	if (pos < 1) return false;
	int i = 1;
	ListNode *p;
	p = L;
	while (p != NULL&&i<pos){
		p = p->next;
		i++;
	}
	if (p != NULL){
		Insert_Next(L, p, val);
		return true;
	}
	else if (p == NULL&&i + 1 == pos){
		Insert_Next(L, p, val);
		return true;
	}
	else{
		cout << "插入位置不合法!" << endl;
		return false;
	}

}
//删除单链表中的元素
bool Delete_List(LinkList L, ListNode *ptr){
	assert(L != NULL);
	if (ptr == NULL)  return false;
	ptr->next = ptr->next->next;
	return true;
}
//从头部删除单链表的元素
void Pop_Front(LinkList L){
	assert(L != NULL);
	ListNode *p = L;
	if (p != NULL){
		Delete_List(L, p);
	}
	else cout << "链表为空!" << endl;
}
//单链表尾删法
void Pop_Back(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next, *s = L;
	ListNode *pre = L;
	while (p->next != NULL){
		pre = p;
		p = p->next;
	}
	Delete_List(L, pre);
	//free(pre);
}
void Swap(ElemType *a, ElemType *b){
	ElemType tmp = *a;
	*a = *b;
	*b = tmp;
}
//时间复杂度为O(1)的算法  删除所以值相等的元素
void Delete_All(LinkList L, ElemType val){
	assert(L != NULL);
	ListNode *p = L->next, *pre = L;
	while (p != NULL){
		if (p->data != val){
			pre = pre->next;
			Swap(&(pre->data), &(p->data));
		}
		p = p->next;
	}
	while (pre->next != NULL) {
		Pop_Back(L);
	}
}
//清除函数--->只剩头节点
void ClearList(LinkList L){
	ListNode *p = L;
	while (p->next != NULL){
		Pop_Back(L);
	}
}
//摧毁函数--->头节点也清空
void DestoryList(LinkList L){
	assert(L != NULL);
	ClearList(L);

	free(L);
	cout << "破坏成功!" << endl;
}
/*
void Inversion_List(LinkList L){
assert(L != NULL);
LinkList  head = Init_LinkList();
ListNode *p = L->next;
while (p != NULL){
Push_Front(head, p->data);
p = p->next;
}
ListNode	*q = head->next, *s = L->next;
while (q != NULL&&s!=NULL){
s->data = q->data;
s = s->next;
q = q->next;
}
}
*/
//单链表逆置(老师的算法yyds!)
void Inversion_List(LinkList L){
	assert(L != NULL);
	ListNode *p = L->next,*pre=L;
	pre->next = NULL;
	while (p != NULL){
		Push_Front(L, p->data);
		p = p->next;
	}
}
///
int main(){
	ListNode *head = Init_LinkList();
	ListNode *p = head->next;
	ElemType arr[] = { 1, 23, 1, 45, 12, 456, 13 };
	for (int i = 0; i < 7; i++){
		Push_Back(head, arr[i]);
	}
	PrintList(head);
	Inversion_List(head);
	cout << "逆置后的链表为:" << endl;
		/*
		ClearList(head);
	cout << p;
		*/
	PrintList(head);


	/*
	ListNode  *p = FindValue_index(head, 5);
	cout << p->data << endl;
	ListNode  *p = FindValue(head, 14);
	cout << p->data  << endl;
	while (1){
	int tag, pos, val;
	cout << "请输入插入位置和插入数值" << endl;
	cin >> pos >> val;
	if (val == -1)  break;
	tag=Insert_Pos(head, pos, val);
	PrintList(head);

	}
	*/
	cout << "时光作渡,眉目成书,从此深情不被辜负!" << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值