LeetCode刷题记录——19删除链表的倒数第N个节点
一 题目描述:
给定一个链表,删除链表的倒数第n个节点,并返回链表的头节点
-
示例:
-
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
-
二 思路:
-
两次遍历:
- 先遍历一遍获得链表的长度,然后再找到第N个位置进行删除操作
-
一次遍历:
-
设置两个指针,间隔为N,当后面的指针的next 为NULL时,即到达末尾时,就表明前面的那个是了。
-
struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = new ListNode(0); //哑节点 if (!head) return head; dummy->next = head; ListNode* p = dummy; ListNode* q = dummy; for (int i = 0; i < n; i++) { q = q->next; } while (q->next) { p = p->next; q = q->next; } p->next = p->next->next; //删除p->next的节点 ListNode* res = dummy->next; delete dummy; //删除哑节点 return res; }
-