本文主要是介绍(力扣)删除链表的倒数第N个节点———链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码为:
*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*
int getLength(struct ListNode* head) {int length = 0;while (head) {++length;head = head->next;}return length;
}struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* L= malloc(sizeof(struct ListNode));L->val = 0;L->next = head;int length = getLength(head);struct ListNode* cur = L;for (int i = 1; i < length - n + 1; ++i) {cur = cur->next;}cur->next = cur->next->next;struct ListNode* ans = L->next;free(L);return ans;
}
分析:
详细步骤:
-
创建辅助节点:
struct ListNode* L = malloc(sizeof(struct ListNode));
- 分配内存并初始化一个辅助头节点
L
,它的值为0,next
指向原始链表的头节点head
。这有助于简化边界条件处理,例如删除链表的第一个节点。
-
计算链表长度:
int length = getLength(head);
- 调用
getLength
函数获取链表的长度。
-
定位要删除的节点的前一个节点:
struct ListNode* cur = L;
- 从辅助节点开始,使用一个循环移动到要删除节点的前一个节点。
for (int i = 1; i < length - n + 1; ++i) { cur = cur->next; }
- 这个循环定位到倒数第
n
个节点的前一个节点。
-
删除节点:
cur->next = cur->next->next;
- 修改当前节点的
next
指针,使其跳过下一个节点,从而达到删除效果。
-
释放辅助节点并返回结果:
struct ListNode* ans = L->next;
- 获取调整后的链表的新头节点。
free(L);
- 释放辅助头节点占用的内存。
return ans;
- 返回新的链表头节点。
这篇关于(力扣)删除链表的倒数第N个节点———链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!