带头结点的单链表实现按位置取元素和按位置插入元素

目录

  • 前言
  • 按位置取元素
    • 1.示意图
    • 2.代码块
  • 按位置插入元素
    • 1.示意图
    • 2.代码块

前言

本文将讨论一下关于带头结点的单链表实现按位置取元素和按位置插入元素,在本文,我们规定按位置删除结点中的位置 i >= 1,也就是i从1开始。

按位置取元素

1.示意图

带头结点的单链表实现按位置取元素和按位置插入元素_第1张图片

2.代码块

elementType getElement(node* L, int i)
{
	//判断输入位置是否合法
	if (i<=0)
	{
		cout << "位置输入错误,位置应该大于等于1!";
		return -1;//错误码为-1(自定义错误码)
	}
	
	node* p = L->next;
	int j = 1;//从第一个结点开始搜索
	while ((i != j) && (p != NULL))//当前节点不是目标节点又不为空,继续处理下一个节点
	{
		p = p->next;
		j++;
	}
	return p->data;//当i==j时候,p即为目标结点,假如p == NULL即超出范围取元素则失败
}

按位置插入元素

1.示意图

PS:在按位置插入元素中,插入第i个位置与插在第i个位置的前面是一个意思,所以我们应该搜索第i - 1的结点Node。
带头结点的单链表实现按位置取元素和按位置插入元素_第2张图片

2.代码块

bool linkedlistInsert(node* L, int i, elementType x)
{
	//判断输入位置是否合法
	if (i<=0)
	{
		cout << "位置输入错误,位置应该大于等于1!";
		return false;
	}
	node* p = L;
	int j = 0;

	while ((j != i - 1) && (p != NULL)) //搜索i-1结点指针p
	{
		p = p->next;//p指向下一个节点
		j++;
	}                //k=i-1或p=NULL退出

	if (p == NULL)
	{
		cout << "出现错误,没有数据";
		return false;
	}
	else
	{
		node* s = new node;// 创建一个新节点
		s->data = x;//装入数据
		//插入新节点
		s->next = p->next;
		p->next = s;
		return true;
	}
}

你可能感兴趣的:(数据结构与算法)