链表的基本操作

本文详细介绍了链表的基本操作,包括如何进行链表的插入、删除、替换以及检索和遍历。在插入操作中,需要找到插入位置的前一个节点;删除操作同样需要找到待删除节点的前一个节点;替换操作只需改变指定位置节点的元素;检索操作是找到特定位置的节点;遍历则需访问所有节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表

  • 链表的插入
    如图所示
    插入操作时,需要获得插入位置的前一个节点,这样插入到前一个节点的后方,即插入到n位置,因为前一个节点的next原本指向后一个节点,即位置n(n从0开始,head不算)。
    所以当n为0时,head指向位置为0的节点,操作为如下:
    当n大于0时,操作如下:
// n == 0
Node * p = new Node;
p->data = data     //数据赋值
p->next = head;    //插入节点尾指向前一个节点指向的节点
head = p;          //前一个节点指向插入节点
// n > 0
Node * q = head;  
Node * p = new Node;
p->data = data;
// 寻找插入节点的前一个节点
for (int i = 0; i < n - 1; ++i) {
    q = q->next;
}
p->next = q->next;  // 插入节点尾指向前一个节点指向的节点
q->next = p;        // 前一个节点指向插入节点

这里写图片描述

  • 链表的删除
    观察上图的插入操作,可知删除操作一样需要得知删除节点前一个节点和删除节点,前一个节点的尾指向删除节点的尾即可从链中移除删除节点,最后再做清楚工作。
Node * q = head;
//  寻找插入节点的前一个节点
for (int i = 0; i < n - 1; ++i) {
    q = q->next;
}
Node * p = q->next; // p即为删除节点,因为前一个节点的尾指向删除节点
q->next = p->next;
delete p;           // 清除数据
  • 链表的替换
    链表的替换与前面的操作不同,只需要找到位置为n的节点,将其元素改变即可,但是有些时候,需要进行,删除节点,插入节点操作,即链的替换,而非元素的替换。
Node * q = head;
// 寻找位置为n的节点,所以不用-1
for (int i = 0;i < n; ++i) {
    q = q->next;
}
// 替换操作
q->data = data;
  • 链表的检索
    同理,检索时为了查看指定位置的元素,所以只需要找到节点即可。
Node * q = head;
for (int i = 0; i < n; ++i) {
    q = q->next;
}
return q->data;
  • 链表的遍历
    遍历需要访问所有节点,代码如下
Node * q = head;
// 当q不为NULL时为真
while (q) {
    cout << q->data << " ";
}
cout << endl;
  • 链表的清除
    删除同样需要访问所有节点
while (head) {
    Node * q = head;
    head = head->next;
    delte q;
    // 可以加一步使q指向NULL
    // q = NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值