删除链表中的第n个节点
程序员文章站
2022-07-12 11:55:31
...
ListNode* dummyNode = new ListNode(0,head);
ListNode* left = dummyNode;//左指针指向虚拟节点
ListNode* right = head;//右指针指向头部节点
for (int i = 0; i < n; i++)right = right->next;//右指针先移动n个位置
while (right)//当右指针不为空时
{
right = right->next;
left = left->next;//左右指针同时移动直到右指针指向NULL
}
left->next = left->next->next;//删除
ListNode* ans = dummyNode->next;
delete dummyNode;//释放内存
使用双指针法解决这个问题
首先,定义两个指针,左指针指向模拟节点,右指针指向头部节点
一开始让右指针移动n个单位
然后再让它们一起移动直到右指针指向NULL
通过改变左指针的next来实现删除的目的,再创建一个ans用来保存头部,之后再释放dummyNode,避免内存泄漏