leetcode打卡第二天,单链表

leetcode打卡第二天,单链表

单链表的简单介绍

单链表是数据结构中的知识点:

是线性表的一种存储表示,其特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的也可以是不连续的),因此为了表示每个数据元素ai与其直接后继数据元素ai+1,之间的逻辑关系,对数据元素ai来说除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分组成数据元素ai的存储映象,称为结点。它包括两个域数据域指针域。其中数据域是用来存储数据元素信息的域。指针域是用来存储后级存储位置的域,指针域存储的信息称为指针或链。一般表示如下图所示:
在这里插入图片描述
整个链表必须从头指针开始,头指针指示链表中第一个结点。同时最后一个元素没有直接后继,则线性表中最后一个结点的指针为“空”(NULL
因此在一些线性表的插入和删除等基本操作中,链表更顺序表所用的时间复杂度会小很多。

LeetCode题解分析:

标题这是题目描述:

在这里插入图片描述

题目分析:

①一开始我做这道题的时候以为给出的head是头指针,就用head->next表示要第一个节点,结果出来的是 1 5 4 3 2 ,经过在此画图分析,通过了这道题目。
②分析如下:
由①可知head即第一个元素,如果想要第二个元素指向第一个元素,则需要将第二个元素的位置用一个指针记住(防止丢失),再将第一个元素的指针为NULL,还需要一个q指针指向该节点。因此我们需要三个指针。
③代码如下:

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode*  p = head;//指向第一个结点
    struct ListNode*  q = NULL;
    struct ListNode* pr;
  if(head==NULL)//当链表为空的时候
  {
      return NULL;
  }
  while(p->next)//p还未指向最后一个元素时
  {
    pr = p->next;//将p->next的位置保存在pr中
    p->next = q;//将p的后继指向q
    q = p;//q向前移动到p
    p = pr;//p向前移动到q
  }
  p->next = q;//当p为最后一个指针的时候,要将p指向前一个的q
  return p;

    
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shutian0816/article/details/84937906