考点预览:
题目描述:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
提示:
-
链表中结点的数目为
sz
-
1 <= sz <= 30
-
0 <= Node.val <= 100
-
1 <= n <= sz
详细解析:
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
struct ListNode *p1, *p2;
p1 = head;
p2 = head;
int i;
for (i = 0; i < n;i++)
{
p1 = p1->next;
}
if(p1==NULL)
{
return head->next;
}
while(p1->next!=NULL)
{
p1 = p1->next;
p2 = p2->next;
}
p2->next = p2->next->next;
return head;
}
题目解析
给定一个链表,删除链表的倒数第 n
个节点,并返回链表的头结点。我们可以通过双指针的方法来高效解决这个问题,避免对链表进行多次遍历。
思路分析