实现一种算法,找出单向链表中单数第k个节点。返回该节点的值.

    1. 输入:1->2->3->4->5 k = 2
    2. 输入: 4
    3. 说明:
    4. 给定的k保证是有效的

    这道题其实就是双指针:

    • 第一个指针默认指向 head 节点 ,第二个指针指向 head+k 位置的节点;
    • 如果第二个指针 next 不为空,双指针同时往后偏移,直至第二个指针指向的是链表的尾结点;
    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * struct ListNode *next;
    6. * };
    7. */
    8. int kthToLast(struct ListNode* head, int k){
    9. struct ListNode *node = head;
    10. struct ListNode *target = head;
    11. // 首先第二个指针找到第k个节点
    12. while (k--) {
    13. node = node->next;
    14. }
    15. // 双指针同时移动,直到第二个指针指向尾节点
    16. while (node) {
    17. node = node->next;
    18. target = target->next;
    19. }
    20. return target->val;
    21. }