问题描述:
Given a linked list, remove the nth node from the end of list and return its head.
示例:
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.问题分析:
一个简单的链表删除结点的算法
1.先遍历一边链表,存住结点索引
2.找到具体删除结点,进行删除,返回链表头结点
下面是我的代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { vector<ListNode*> link; ListNode* del(0);// 待删除的结点 while(head != NULL) { link.push_back(head); head = head->next; } if(n == link.size())// 删除的是第一个元素 { del = link[0]; head = del->next; return head; } else { del = link[link.size() - n]; ListNode* ex_del = link[link.size() - n - 1]; ex_del->next = del->next; return link[0]; } } };