单链表[建表、输出、插入、删除、逆序]

面试的时候老是被问到单链知识索性总结一下。

这篇文章主要总结了单链表的创建、输出、逆序、插入和删除。


逆序原理

单链表


源代码:

#include <iostream>
using namespace std;

typedef int ElemType;//数据类型模板

typedef struct Node//结点
{
	ElemType data;
	struct Node *next;
}Node;

typedef struct Node * LinkList;

//////////建表
Node* creat_Link(Node *head)
{
	int x;
	Node *p,*q;

	head=(Node *)malloc(sizeof(Node));
	head->next=NULL;

	q=head;

	cin>>x;
    while(x!=999)
	{   
		p=(Node *)malloc(sizeof(Node)); 
        p->data=x;
		p->next=NULL;
        q->next=p;
        q=p;
		cin>>x;
	}
	return head;//建完表后返回头结点
}

//////////输出
void output_Link(Node * head)
{ 
	if(head==NULL)
	{
		cout<<"空链表!"<<endl;
		return;
	}
	Node *q;
	q= head->next;
	while(q!=NULL)
	{
		cout<<q->data<<" ";
		q=q->next;
	}
}

//////////逆序
Node * reverse_Link(Node * head)
{
	Node *current,*p;
	if(head==NULL)
	{
		cout<<"空链表!"<<endl;
		return NULL;
	}
	current=head->next;
	while(current->next != NULL)
	{
		p=current->next;
		current->next = p->next;
		p->next = head->next;
		head->next = p;
	}
	return head;
}

//////////插入
Node * insert_Link(Node *head,int i, ElemType e)//i位置前插入值e
{
	Node *q,*iq;
	q= head->next;
	for(int j=1;j<i;j++)
	{
		iq=q;
		q=q->next;
	}
 
	Node *s;//在iq处插入S节点
	//s=(LinkList)malloc(sizeof(Node)); //生成新节点 
	s=(Node *)malloc(sizeof(Node)); 
	s->data=e;
	s->next=iq->next;
	iq->next=s; 

	return head;
}

//////////删除
Node * delete_Link(Node *head,int i)//删除位置i
{
	if(i==1)
		head = head ->next; 
	else
	{
		Node *p,*q;
		q= head->next;
		for(int j=1;j<i;j++)
		{   
			p=q;
			q=q->next;//找出删除的q位置
		}
		p->next=q->next;
		delete q;
		//free(q);
	}
	return head;
}


int main()
{
	Node *head=NULL;
	//creat_Link(head);
	Node * m=creat_Link(head);//建表

	cout<<"初始链表为:"<<endl;
	output_Link(m);//输出原链表

	cout<<endl<<"逆序链表为:"<<endl;
	Node * n=reverse_Link(m);//逆序
	output_Link(n);//输出逆序链表

	cout<<endl<<"插入输出为:"<<endl;
	Node * x=insert_Link(n,3,100);//下标1开始,3前插入100
	output_Link(x);

	cout<<endl<<"删除输出为:"<<endl;
	Node * y=delete_Link(n,2);//下标1开始,删除2位置的结点
	output_Link(y);

	cout<<endl;
	return 0;
}


测试结果:

建表


您的回应...

相关话题

查看全部

也许你感兴趣

换一批

热门标签

更多