holyya.com
2025-09-04 22:08:05 Thursday
登录
文章检索 我的文章 写文章
C++实现单链表删除第n个节点
2023-06-26 17:38:34 深夜i     --     --
C++ 单链表 删除 第n个节点

单链表是一种常见的数据结构,在C++中可以使用指针来实现。在实际应用中,需要经常对单链表进行增加、删除和查找等操作。本文将介绍如何通过C++实现单链表删除第n个节点的操作。

1. 单链表的定义

单链表由节点组成,每个节点包括两个部分:数据和指针。数据可以是任意类型的数据,指针则用来指向下一个节点。


class ListNode {

public:

  int val;

  ListNode* next;

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

};

2. 单链表删除第n个节点的实现

要删除单链表中的第n个节点,需要先找到该节点的前一个节点,将其指针指向该节点的后一个节点。则可以使用两个指针指向链表中的节点,一个指针先移动n个位置,然后再同时移动两个指针,直到第一个指针到达链表尾部为止。


ListNode* removeNthFromEnd(ListNode* head, int n) {

  ListNode* dummy = new ListNode(0);

  dummy->next = head;

  ListNode* first = dummy;

  ListNode* second = dummy;

  for (int i = 0; i <= n; i++)

    first = first->next;

  

  while (first != nullptr)

    first = first->next;

    second = second->next;

  

  second->next = second->next->next;

  return dummy->next;

}

3. 单链表删除第n个节点的测试用例


int main() {

  ListNode* head = new ListNode(1);

  head->next = new ListNode(2);

  head->next->next = new ListNode(3);

  head->next->next->next = new ListNode(4);

  head->next->next->next->next = new ListNode(5);

  int n = 2;

  ListNode* result = removeNthFromEnd(head, n);

  while (result != nullptr)

    cout << result->val << " ";

    result = result->next;

  

  return 0;

}

通过上面的测试用例可以看到,将单链表中的第二个节点删除后,输出结果为:1 2 4 5。

总之,单链表是一种非常常用的数据结构,通过C++语言可以很容易实现单链表的增删改查等操作。需要注意的是,为了防止内存泄漏,需要及时释放所申请的内存空间。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复