秒懂单链表2

简介: 秒懂单链表2
//尾删
void SListPopBack(SLTNode** pphead)
{
  //1.空
  if (*pphead == NULL)
  {
  return;
  }
  //2.一个结点
  else if ((*pphead)->next == NULL)
  {
  free(*pphead);
  *pphead = NULL;
  }
  //3.多个节点,至少两个
  else
  {
  SLTNode* prev = NULL;
  SLTNode* tail = *pphead;
  while (tail->next != NULL)
  {
    prev = tail;
    tail = tail->next;
  }
  free(tail);
  prev->next = NULL;
  }
}



w4.png


//查找
SLTNode* SListFind(SLTNode* phead, SLTDataType x)
{
  SLTNode* cur = phead;
  //while (cur != NULL)
  while (cur)
  {
  if (cur->data == x)
  {
    return cur;
  }
  cur = cur->next;
  }
  return NULL;
}


e1.png


//在查找的那个数的前面插入x
void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{
  SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
  newnode->data = x;
  newnode->next = NULL;
  if (pos == *pphead)
  {
  SListPushFront(pphead, x);
  }
  else
  {
  SLTNode* prev = *pphead;
  while (prev->next != pos)
  {
    prev = prev->next;
  }
  prev->next = newnode;
  newnode->next = pos;
  }
}


e2.png



//删除pos位置的值
void SListErase(SLTNode** pphead, SLTNode* pos)
{
  //1.为第一个结点或者为空
  if (pos==*pphead)
  {
  SListPopFront(pphead);
  }
  else
  {
  SLTNode* prev = *pphead;
  while (prev->next != pos)
  {
    prev = prev->next;
  }
  prev->next = pos->next;
  free(pos);
  }
}


e3.png



好了今天就到这了,想必大家也学会到了许多啦!!!


       我们继续加油哦!


                       下篇博客是双链表哦!


相关文章
|
11月前
|
存储
【单链表】
【单链表】
57 0
|
3月前
|
存储 算法
单链表的应用
单链表的应用
35 6
|
3月前
|
存储
单链表专题
单链表专题
33 4
|
3月前
|
存储
单链表的实现
单链表的实现
19 0
|
4月前
|
存储 编译器
单链表与双链表实现
单链表与双链表实现
39 4
|
4月前
|
搜索推荐
了解单链表
了解单链表
36 0
|
4月前
|
存储 C语言
单链表详解
单链表详解
85 0
|
4月前
|
存储 缓存
详解单链表
详解单链表
60 0
详解单链表
|
存储
单链表
单链表