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; } }