【数据结构】链表相关练习题:反转链表

反转一个单链表。

示例:

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

这道题有两种思路

①传统的使用三个指针:两个指针用来交换,另一个指针用来向前走  ,具体代码如下:

/**
 * 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* n1,*n2,*n3;
    n1=head;
    n2=n1->next;
    n3=n2->next;
    n1->next=NULL;
    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;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) 
{
        struct ListNode* newhead=NULL;
        struct ListNode* cur=head;
        while(cur)
        {
            struct ListNode* next=cur->next;
            cur->next=newhead;
            newhead=cur;
            cur=next;
        }
        return newhead;
 }

oj链接如下:https://leetcode-cn.com/problems/reverse-linked-list/description/

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/83034164
今日推荐