您的位置:首页 > 其它

LintCode-174.删除链表中倒数第n个节点

2017-05-04 14:20 316 查看

删除链表中倒数第n个节点


给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

注意事项

链表中的节点个数大于等于n

样例

给出链表 1->2->3->4->5->null 和 n = 2.

删除倒数第二个节点之后,这个链表将变成 1->2->3->5->null .

挑战

O(n)时间复杂度

标签

链表 两根指针


code

/**
* Definition of ListNode
* class ListNode {
* public:
*     int val;
*     ListNode *next;
*     ListNode(int val) {
*         this->val = val;
*         this->next = NULL;
*     }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: The head of linked list.
*/
ListNode *removeNthFromEnd(ListNode *head, int n) {
// write your code here
if(n > 0) {
ListNode *pBegin=head, *pEnd=head;
while(n-- && pEnd!=NULL) {
pEnd = pEnd->next;
}
//  n<链表长度
if(n == -1 && pEnd!=NULL) {
while(pEnd->next != NULL) {
pBegin = pBegin->next;
pEnd = pEnd->next;
}
pBegin->next = pBegin->next->next;
return head;
}
//  n>链表长度
else if(n > -1 && pEnd!=NULL) {
return head;
}
//  n=链表长度
else {
return head->next;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: