首页 > 代码库 > 【Leetcode】【Easy】Remove Nth Node From End of List
【Leetcode】【Easy】Remove Nth Node From End of List
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.
普通青年解法:
设置三个指针A\B\C,指针A和B间隔n-1个结点,用指针A去遍历链表直到指向最后一个元素,则此时指针B指向的结点为要删除的结点,指针C指向指针B的pre,方便删除的操作。
代码:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution {10 public:11 ListNode *removeNthFromEnd(ListNode *head, int n) {12 ListNode *target = head;13 ListNode *target_pre = NULL;14 ListNode *findthelast = head;15 16 if (head == NULL)17 return head;18 19 while(--n>0)20 findthelast = findthelast->next;21 22 while (findthelast->next) {23 target_pre = target;24 target = target->next;25 findthelast = findthelast->next;26 }27 28 if (target_pre == NULL) {29 head = target->next;30 return head;31 }32 33 target_pre->next = target->next;34 35 return head;36 }37 };
文艺智慧青年解法:
1 class Solution 2 { 3 public: 4 ListNode* removeNthFromEnd(ListNode* head, int n) 5 { 6 ListNode** t1 = &head, *t2 = head; 7 for(int i = 1; i < n; ++i) 8 { 9 t2 = t2->next;10 }11 while(t2->next != NULL)12 {13 t1 = &((*t1)->next);14 t2 = t2->next;15 }16 *t1 = (*t1)->next;17 return head;18 }19 };
【Leetcode】【Easy】Remove Nth Node From End of List
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。