单链表倒序

struct ListNode {
    int val;
    struct ListNode *next;
};

// 倒序单链表方法有
// 1、删除插入
// 2、遍历倒插 ✅

// 这里用了方法2
struct ListNode * reverseList(struct ListNode *p) {
    
    struct ListNode *head = NULL;
    
    int size = sizeof(struct ListNode);
    while (p) {
        
        struct ListNode *temp = (struct ListNode *)malloc(size);
        
        temp->next = head;        // 先将next指针置为之前节点
        head = temp;             // 设置头节点
        temp->val = p->val;     // 存值
        
        p = p->next;
    }
    
    return head;
}

// 这样更易于理解
struct ListNode * reverseList2(struct ListNode *p) {
    
    struct ListNode *head = {0};
    
    unsigned int size = sizeof(struct ListNode);
    while (p) {
        
        struct ListNode *curr = (struct ListNode *)malloc(size);
        curr->val = p->val;     // 存值
        curr->next = head;
        
        head = curr;
        p = p->next;
    }
    
    return head;
}

你可能感兴趣的:(单链表倒序)