删除链表的倒数第k个节点
思想及算法
因为要删除倒数第k个节点,因此要知道是的正序的第几个,所以可以先遍历一遍链表获得链表的长度。
代码
#include<iostream>
using namespace std;
struct list {
int val;
list* next;
list(int x) :val(x), next(nullptr) {}
};
list* insert(list* head, int x) {
list* p = head;
while (p->next)
{
p = p->next;
}
list* t = new list(x);
p->next = t;
return head;
}
void pprint(list* head) {
if (nullptr == head) {
return;
}
if (head->next == nullptr) {
cout << head->val << endl;
}
else
{
cout << head->val << "->";
}
return pprint(head->next);
}
//遍历链表获得链表的长度
list* ddelete1(list* head,int k) {
if (nullptr == head || k < 0) {
return nullptr;
}
int temp;
int length = 1;
list* p = head;
while (p->next)
{
p = p->next;
length++;
}
temp = length - k;
p = head;
while (temp-->1) {
p = p->next;
}
p->next = p->next->next;
return head;
}
int main() {
list* head = new list(0);
for (int i = 1; i < 2; i++) {
insert(head, i);
}
pprint(head);
ddelete1(head, 1);
pprint(head);
return 0;
}