刷leetcode-day25

xiaoxiao2025-10-15  12

一、题目:

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

 

 

转载请注明原文地址: https://www.6miu.com/read-5037938.html

最新回复(0)