C++单链表的创建插入删除以及逆序操作

之前的笔试面试过程中也经常遇到链表问题,趁着有时间就自己动手写写调试了一把,也加深了一下自己对链表的认识和理解。由于本人非常初级,所以只是将自己调试通过的代码记录一下,供自己参考啦!

#include 
#include 

using namespace std;

int n = 10;

typedef struct LinkList 
{
	int data;
	struct LinkList *next;
}LL;

LL *creatLL(int n)//通过一个一个输入来创建长度为n的单链表单链表
{
	int x,k;
	LL *head,*r,*p;
	p = (LL *)malloc(sizeof(LL));
	head = p;
	p->next = NULL;
	r = p;
	for (k = 1;k<=n;k++)
	{
		cout<<"input value:"<>x;
		p = (LL *)malloc(sizeof(LL));
		p->data = x;
		p->next = NULL;
		r->next = p;
		r = r->next;
	}
	return head;
}

LL *InsetNode(LL *head,int Num)//在第Num个元素之前插入节点
{
	int t = 0;
	int data0;
	LL *p,*q;
	p = head;
	if (Num>n||Num<0)
	{
		cout<<"input error!"<next;
		t++;
	}
	q = (LL *)malloc(sizeof(LL));
	if (q == NULL)
	{
		cout<<"can not find space!"<>data0;
	cout<data = data0;
	q->next = p->next;
	p->next = q;
	n++;
	return head;
}

LL *DelNode(LL *head,int Num)//删除第Num的节点
{
	int t = 0;
	LL *p,*q;
	p = head;
	if (Num>n||Num<0)
	{
		cout<<"input error!"<next;
		t++;
	}
	q = p->next;
	p->next = p->next->next;
	free(q);//释放被删除的节点
	n--;
	return head;
}

LL *RevertList(LL *head)//逆序单链表
{
	if (head->next == NULL)
	{
		cout<<"only one head bode"<next;
	q = NULL;//新建一个空指针
	while (p)
	{
		succ = p->next;//保存下一个节点
		p->next = q; //指向直接前驱
		q = p;   //保存待逆序的前一个节点
		p = succ; //得到将逆序的节点
	}
	head->next = q;//得到待逆序的前一个节点,最后head将指向原链表的最后一个节点
	return head;
}

void main()
{
	LL *head,*p;
	head = creatLL(n);
//	p = InsetNode(head,0);
//	p = DelNode(head,3);
	p = RevertList(head);
	cout<next != NULL)
	{
		cout<next->data<<" ";
		p = p->next;
	}
}

这里链表的创建是通过一个一个输入来完成的,也可以换成一次输入指定个数的数据来创建链表,也很简单,这里就不啰嗦了,有兴趣的自己动手试试吧!

你可能感兴趣的:(面试)