LeetCode初级算法-链表-3

题目:反转链表

反转一个单链表。

示例:

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

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

C语言解题

解法一:递归

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL||head->next==NULL)
        return head;
    struct ListNode *h=reverseList(head->next);
    head->next->next=head;
    head->next=NULL;
    return h;
}

解法二:

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode *h=head,*temp=NULL,*p=head;
  
    while(h!=NULL)
    {
        h=h->next;
        p->next=temp;
        temp=p;
        p=h;
    }
   
    return temp;
}

你可能感兴趣的:(C语言,LeetCode)