反转链表

 

反转链表

 

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head==nullptr||head->next==nullptr)
           return head;
        ListNode *cur=head;
        int size=1;
        while(cur->next!=nullptr) {
            size++;
            cur=cur->next;
        }
        cur=head;
        for(int i=0;i<size-1;i++) {
            ListNode *tmp=cur->next; //标记原第二个结点
            cur->next=cur->next->next; //原头结点指向第三个结点
            tmp->next=head; //原第二个结点指向头结点
            head=tmp; //原第二个结点标记为新头结点。
           // ListNode *tmp=cur->next->next;  //标记原第三个结点
           // cur->next->next=head;       //原第二个结点指向头结点。
           // head=cur->next;         //原第二个结点标记为新头结点
           // cur->next=tmp;          //新头结点指向原第三个结点
        }
        return head;
    }
};
 

 

posted @ 2020-11-21 16:13  yanjan  阅读(110)  评论(0)    收藏  举报