刪除連結串列的倒數第N個節點(leetcode)
阿新 • • 發佈:2018-12-07
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
示例:
給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
思路:雙指標 fisrt指標先走n步,再同時和sec指標走,當first的next為null時,sec的next即為要刪除的節點。
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeNthFromEnd(struct ListNode* head, int n) { struct ListNode* first=head; while(n--) { first=first->next; } if(!first) return head->next; struct ListNode*sec=head; while(first->next!=NULL) { first=first->next; sec=sec->next; } sec->next=sec->next->next; return head; }