和大神们学习每天一题(leetcode)-Remove Nth Node From End of List

来源:互联网 发布:java调用高德api例子 编辑:程序博客网 时间:2024/06/05 20:45

Given a linked list, remove the nth node from the end of list and return its head.

For example,

   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.

Note:
Given n will always be valid.

Try to do this in one pass.

class Solution {public:ListNode *removeNthFromEnd(ListNode *head, int n) {ListNode *LNp1 = head, *LNp2 = head;//定义两个指针并指向头指针指向的地址if (head == NULL ||head->next == NULL)//如果头指针为空或者头指针的next为空,返回空return NULL;for (int nTemp = 0; nTemp < n - 1; nTemp++)//第二个指针先走n-1步{LNp2 = LNp2->next;}if (LNp2->next == NULL)//如果第二个指针指向链表末位,则将链表的第一个节点去掉{head = head->next;free(LNp1);LNp1 = NULL;return head;}LNp2 = LNp2->next;//第二个指针再走一步while (LNp2->next != NULL)//当第二个指针指向链表末位时第一指针指向当删除节点的前一位{LNp1 = LNp1->next;LNp2 = LNp2->next;}LNp2 = LNp1->next;//删除节点并释放空间LNp1->next = LNp1->next->next;free(LNp2);LNp2 = NULL;return head;//返回头指针}};



0 0
原创粉丝点击