记录前一个,中间一个,后一个。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL)return head;
ListNode *elem;
elem=head;
head=head->next;
elem->next=NULL;
while(head)
{
ListNode *x=head->next;
head->next=elem;
elem=head;
head=x;
}
return elem;
}
};
扩展:链表折半,比如1>2>3>4>5>6.return 1>6>2>5>3>4
1.找中间节点,利用大小步,
两个指针一个走一步,一个走两步。
2,从中间节点将后面的那部分翻转。
3.两个链表合并就行了。纯属OB。