Day6 链表的基础操作I -卡码网C++基础课

题目链接:链表的基础操作I

题目描述

构建一个单向链表,链表中包含一组整数数据。输出链表中的所有元素。

要求:

1. 使用自定义的链表数据结构
2. 提供一个 linkedList 类来管理链表,包含构建链表和输出链表元素的方法
3. 在 main 函数中,创建一个包含一组整数数据的链表,然后调用链表的输出方法将所有元素打印出来

输入描述

包含多组测试数据,输入直到文件尾结束。 
每组的第一行包含一个整数 n,表示需要构建的链表的长度。 
接下来一行包含 n 个整数,表示链表中的元素。

输出描述

每组测试数据输出占一行。
按照顺序打印出链表中的元素,每个元素后面跟一个空格。

输入示例

5
1 2 3 4 5
6
3 4 5 6 7 8

输出示例

1 2 3 4 5
3 4 5 6 7 8

提示信息

数据范围:1 <= n <= 1000;
点击查看代码
#include<iostream>
using namespace std;

struct ListNode {
  int val;
  ListNode* next;
  ListNode(int x) : val(x), next(nullptr){}
};

int main(){
  int n, val;
  ListNode* dummyHead = new ListNode(0);
  while(cin >> n){
      ListNode* cur = dummyHead;
      for(int i =0; i < n; i++){
          cin >> val;
          ListNode* newNode = new ListNode(val);
          cur -> next = newNode;
          cur = cur -> next;
      }
      cur = dummyHead;
      while(cur -> next != NULL){
          cout << cur -> next -> val << ' ';
          cur = cur -> next;
      }
      cout << endl;
  }
}
小结

指针

声明
  int* p;   //指向整数的指针

存地址
  int* p = &x;  //取地址符&获取地址

获取地址的值
  int value = *p;  //使用*符号来访问,解引用

数组与指针

  数组名本质就是指向数组第一个元素的指针
    int arr[3] = {1, 2, 3};
    int *ptr = arr;   // 数组名arr就是指向arr[0]的指针

  指针还可以执行加法、减法等算术操作
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 指向数组的第一个元素
    int value = *(ptr + 2); // 获取数组的第三个元素(值为3)

空指针值(nullptr)
  用于表示指针不指向任何有效的内存地址。
  int *ptr = nullptr;   // 初始化为空指针

链表

链表结构定义
  struct ListNode {
  int val;  // 存储节点的数据
  ListNode *next; // 指向下一个节点的指针	
  ListNode(int x) : val(x), next(nullptr) {}  
  };

构造函数
  ListNode(int x) : val(x), next(nullptr) {}  // 构造函数,用于初始化节点, x接收数据作为数据域,next(nullptr)表示next指针为空
    构造函数名称要和结构体相同

链表的插入
  ListNode *newNode = new ListNode(val);   // 通过new构造一个新的节点,节点的值为val
  cur -> next = newNode;   // cur节点的next节点是新节点,从而将新节点接入链表
  cur = cur -> next;  

    new
      在堆内存中动态分配内存空间,并返回分配内存的地址
    ->
      通过指针访问指针所指向的对象的成员
posted @ 2025-12-19 20:00  afterday  阅读(0)  评论(0)    收藏  举报