一、题目:
206.反转链表:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL二、思路:
反转链表结点的值,从第一个结点向后遍历,依次交换前后两个结点的值,把第一个结点的值放到最后;然后再从第一个结点向后依次交换,把第一个结点的值放在倒数第二个结点位置。。。
三、代码(C++):
ListNode* reverseList(ListNode* head) { if(head==NULL) //判断链表是否为空 return head; ListNode *p=head; ListNode *q=head; ListNode *l=head; while(q->next!=NULL) q=q->next; //将q指向尾结点 while(p!=q) //控制每一次需要交换的次数(递减) { while(p!=q) //具体的一次交换:把p结点的值交换到q结点处 { int t=p->val; p->val=p->next->val; p->next->val=t; p=p->next; } p=head; //重置p结点 while(l->next!=NULL&&l->next!=q) //寻找当前p结点的上一个结点 l=l->next; q=l; //把q指向q的上一个结点 l=head; //重置l } return head; }
四、扩展:看不懂T_T