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;
	}
}
相關文章
相關標籤/搜索