编写函数 要求逆置单链表(不带头节点)

OJ链接:反转链表

方法一:就地三指针转方向 

编写函数 要求逆置单链表(不带头节点)_第1张图片

/**
 * 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==NULL || head->next==NULL)
        return head;

        ListNode *n1,*n2,*n3;
        n1=NULL;
        n2=head;
        n3=n2->next;

        while(n2)
        {
            n2->next=n1;
            n1=n2;
            n2=n3;
            if(n3)
            n3=n3->next;
        }
        return n1;
    }
};

 方法二:头插法

  • 取节点新插到新链表
/**
 * 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==NULL || head->next==NULL)
        return head;

        ListNode* cur=head;
        ListNode* newnode =NULL;

        while(cur)
        {
            ListNode* next=cur->next;
            cur->next=newnode;
            newnode=cur;

            cur=next;
        }
        return newnode;
    }
};

 

你可能感兴趣的:(数据结构)