前言
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
一、示例

二、代码
代码如下(示例):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* q = (struct ListNode*)malloc(sizeof(struct ListNode));
int i = 1, num;
p = head;
q = head;
//如果链表为空
if(NULL == p) {
return head;
}
//如果链表为一个结点,而且删除倒数第一个结点,返回空
if(NULL == p->next && 1 == n) {
return NULL;
}
//求出单链表有多少个结点
while(p->next != NULL) {
i++;
p = p->next;
}
//如果删除的是第一个结点,返回第二个结点当作头结点
if(i == n) {
q = q->next;
return q;
} else {
for(num = 0; num < (i-n-1); num++) {
q = q->next;
}
q->next = q->next->next;
return head;
}
}
这篇博客介绍了如何在单链表中删除倒数第n个节点。首先,通过遍历链表计算节点总数,然后根据n的值确定删除操作的位置,实现高效地删除操作。示例代码展示了具体的实现细节。
2459

被折叠的 条评论
为什么被折叠?



