输出单向链表倒数第k个结点(HJ51)
一:解题思路
这道题目和leetode 19 有些类似,可以放在一起进行学习。这个题目需要自己创建单链表,并且还有倒数第0个,这个我个人认为没有必要。我保持和leetcode 19一样的写法。
二:完整代码示例 (C++版和Java版)
C++代码:
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* removeNthFromEnd(ListNode* head, int n) { if (head == NULL || n <= 0) return head; ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* p = dummy; ListNode* q = dummy; for (; q->next != NULL && n > 0; n--) q = q->next; if (n != 0) return dummy->next; while (q->next != NULL) { p = p->next; q = q->next; } //p->next = p->next->next; return p->next; } int main() { int n = 0; while (cin >> n) { int temp = 0; ListNode* head = NULL; ListNode* slider = NULL; for (int i = 0; i < n; i++) { cin >> temp; ListNode* node = new ListNode(temp); if (slider == NULL) { slider = node; head = node; } else { slider->next = node; slider = node; } } int k = 0; cin >> k; ListNode* result = removeNthFromEnd(head,k); cout << result->val << endl; } return 0; }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号