脚本宝典收集整理的这篇文章主要介绍了(Leetcode-链表-1) 删除节点,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
1.删除链表的结点
编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点。假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为1 -> 2 -> 4。
分析:
1.待删除的节点不是尾节点
2.可以不借助待删除节点的父节点,可以直接操作待删除的节点
void deleteNode(ListNode* node) {
ListNode* next=node->next;
node->val=next->val;
node->next=next->next;
free(next);
}
2.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点并返回头结点。给的 n 始终是有效的。尝试一次遍历实现。
给定一个链表: 1->2->3->4->5, 并且 n = 2.
当删除了倒数第二个节点后链表变成了 1->2->3->5.
分析:
1.n永远有效可以不考虑
2.待删除节点可以是尾巴节点,则需要借助父节点,因为待删除的节点不可以直接为NULL
3.当被删节点为头节点时,需要借助第三方节点(头结点的父节点)
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* node=(ListNode*)malloc(sizeof(ListNode));
node->next=head;
ListNode* front=node;
while(--n)head=head->next;
while(head->next!=NULL){
front=front->next;
head=head->next;
}
ListNode* tmp=front->next;
front->next=tmp->next;
free(tmp);
return node->next;
}
以上是脚本宝典为你收集整理的(Leetcode-链表-1) 删除节点全部内容,希望文章能够帮你解决(Leetcode-链表-1) 删除节点所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。