定义三个指针,遍历一遍即可反转

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * struct ListNode *next;
    6. * };
    7. */
    8. struct ListNode* reverseList(struct ListNode* head){
    9. if (head == NULL) return NULL;
    10. if (head->next == NULL) return head;
    11. struct ListNode *p1=head, *p2=head->next;
    12. if (head->next->next == NULL) {
    13. p2->next=p1;
    14. p1->next=NULL;
    15. return p2;
    16. }
    17. struct ListNode *p3=head->next->next;
    18. p1->next=NULL;
    19. while(p2!=NULL) {
    20. p2->next=p1;
    21. p1=p2;
    22. p2=p3;
    23. if (p2!=NULL)
    24. p3=p2->next;
    25. }
    26. return p1;
    27. }

    leedcode通过,效率还可以:

    1. 执行用时:4 ms, 在所有 C 提交中击败了83.92% 的用户
    2. 内存消耗:6.3 MB, 在所有 C 提交中击败了50.25% 的用户