c++实现单向链表的一些操作

#include<iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <string.h>
#include<stack>
#include<ctime>
#include <sstream>
using namespace std;

//链表的数据结构
struct ListNode
{
	int value;
	ListNode* next;	
	ListNode () {};
	//赋值构造函数
	ListNode (int v) : value(v),next(NULL){};
};
// 函数头声明
ListNode* arraytolist (vector<int> a);
void printlist(ListNode* fir);
void insert(ListNode* p, int poi,int in);
void deletenode(ListNode* p, int poi);
void selectionsort(ListNode* p);

// 按下F6进行编译
int main()
{
	//创建一个链表(2,1,4,3,0,4,-1)
	vector<int> a({2,1,4,3,0,4,-1});
	ListNode* b=arraytolist(a);
	insert(b,2,-10);
	deletenode(b,2);
	printlist(b);
	return 0;
}

// 根据数组创建一个链表
ListNode* arraytolist (vector<int> a)
{
	ListNode* p=new ListNode(a[0]);
	ListNode* fir=p;
	for(int i=1;i<a.size();i++)
	{
		p->next=new ListNode(a[i]);
		p=p->next;
	}
	return fir;
}
//遍历并打印一个链表
void printlist(ListNode* fir)
{
	while(fir!=NULL)
	{
		cout << fir->value << ' ';
		fir=fir->next;
	}
	cout << endl;
}
//插入一个节点(后插入)
void insert(ListNode* p , int poi ,int in)
{
	if(poi<0 ) return;
	while((0 < poi--) ) 
	{
		if(p->next != NULL) p=p->next;
		else break;
	}
	ListNode* mi=new ListNode(in);
	mi->next=p->next;
	p->next=mi;	
}
// 删除节点
void deletenode(ListNode* p, int poi)
{
	if(poi<0) return ;
	while(0 < poi--)
	{
		if(p->next !=NULL) p=p->next;
		else break;
	}
	if(p->next !=NULL) 
	{
		ListNode *tmp=p->next;
		p->next=tmp->next;
		delete tmp;
	}
}

  

posted @ 2019-02-27 19:13  yskn  阅读(899)  评论(0编辑  收藏  举报