题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn2925/
一、最容易想到的方法就是,计算出链表的长度,用长度减去n就是要删除节点的前一个节点,这里要注意的是,如果计算出来的节点位置为0,表示要删除第一个节点,直接头指针往后移一下就可以了。知道了前一个节点,删除后边的节点就好办了。假设指针p指向前驱结点,用一个临时的指针q指向要删除的节点,p->next = q->next,free(q),q=NULL,就把q指向的节点删除了
看图:
main函数代码
#include<stdio.h>
#include<stdlib.h>
struct ListNode* removeNthFromEnd(struct ListNode* head, int n);
// 结构体
struct ListNode {
int val;
struct ListNode *next;
};
int main(){
// 动态申请四个空间
struct ListNode *a = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *b = (struct ListNode *)malloc(sizeof