Reverse a singly linked list. 这是个简单的问题,主要考察的是对于链表的操作,并没有涉及算法什么的。让我正好温习了一下c 中链表的处理。 要翻转链表,首先考虑空元素,一个元素和两个元素的情况。然后用三个指针分别指向已经翻转部分的头pre,目前正呆处理的cur,还有cur的下一个,然后将cur的next指向pre,让pre等于cur,cur=post,post = post->next,这样依次往后移动进行处理。

struct ListNode {
     int val;
     struct ListNode *next;
  };

struct ListNode* reverseList(struct ListNode* head) {
   //注意定义的时候不能少了struct,我一开始就是没有struct从而没有ac.
    struct ListNode *pre,*cur,*post;
    if(head == NULL||head->next==NULL){
        return head;
    }
    if(head->next->next == NULL){
        ListNode* newhead = head->next;
        newhead->next = head;
        head->next = NULL;
        return newhead;
    }
    else{
         pre = head;
         cur = pre->next;
        pre->next = NULL;
         post = cur->next;
        cur->next = pre;
        while(post!=NULL){
            pre = cur;
            cur = post;
            post = post->next;
            cur->next = pre;
        }
        return cur;
    }    
}