链表--当前结点之后插入新节点结点

以下为链表定义

struct LinkList {
	LinkNode* front;  // 指向头结点
    LinkNode* rear;   // 指向尾结点
    LinkNode* pre;    // 指向当前位置结点的前一个结点
    LinkNode* curr;   // 指向当前位置结点
    int position;     // 当前位置结点的编号
    int len;          // 线性表的大小(链表结点数)
}llist;

在这里插入图片描述
分析:

  1. 首先向机器申请内存,若申请不成功则推出程序
 LinkNode *newNode=(LinkNode*)malloc(sizeof(LinkNode));
  1. 当前节点在链表中的位置有三种:
  • 表空,当前结点为空
  • 当前结点在表中
  • 当前结点在表尾
  1. 若表空,当前结点为首结点,尾结点,pre依然为NULL,position不变,curr指向新结点
  2. 若当前结点在表中,pre指针加1,position加1,curr指向新结点
  3. 若curr指向表尾,pre指针加1,position加1,curr指向新结点,并且rear指向新结点
    代码如下:
bool LL_InsAfter(LinkList* llist, T x)
// 在线性表的当前位置之后插入数据元素x。空表允许插入。当前位置指针将指向新结点。
// 若插入失败,返回false,否则返回true。
{
    LinkNode *newNode=(LinkNode*)malloc(sizeof(LinkNode));
    if (newNode==NULL) return false;//申请空间失败

    newNode->data=x;//对新结点赋值

     if (llist->len==0){
        /* 在空表中插入*/
        newNode->next=NULL;
        llist->front = llist->rear = newNode;//头结点和尾结点都是newNode
	}

	else if(llist->curr==llist->rear){
        /*在表尾后插入*/
        newNode->next=NULL;
        llist->rear->next=newNode;
        llist->rear=newNode;
        llist->pre++;//pre结点指向尾结点
        llist->position++;
        }
	else {
        /*在表中插入*/
        newNode->next=llist->curr->next;
        llist->curr->next=newNode;
        llist->pre++;
        llist->position++;
	}
	llist->curr=newNode;/*设置当前结点为新结点*/
	llist->len++;/*链表的长度增加*/
	return true;


}

我编写时出现的问题:

  1. 没有考虑当前结点在表中或表尾时,position需要加1
  2. 没有考虑当前结点在表中或表尾时,pre指向改变前的当前结点
  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值