学渣带你刷Leetcode0206. 反转链表

tech2023-10-08  96

题目描述

反转一个单链表。

示例:

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

白话题目:  

没有啥的,会一些数据结构的小伙伴,都应该能玩了吧。给一个链表,反着输出形成新的链表

没学过的小伙伴,看下边。啥都有。

我来帮你解决简单问题,我就喜欢把复杂问题简单化,把简单的事情墨迹化。

算法:

(1)找到链表的头和它后面的哪一个

(2)把头摘下来,连接到新表的头(一开始啥也没有就是尾呗)

(3)这个“头”成为新表的头

直到世界的尽头。

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB

C语言完全代码

#include <stdio.h> #include <stdlib.h> /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode { int val; struct ListNode *next; } ListNode; ListNode *ListCreate(int n) { ListNode *p=NULL,*head,*r; head=NULL; r=head; int i=0; //尾插法 while(i<n) { int x; scanf("%d",&x); p=(ListNode*)malloc(sizeof(ListNode)); p->val=x; if(head==NULL) //第一个 { head=p; r=p; p->next=NULL; } else { r->next=p; r=p; } i++; } r->next=NULL; return head; } void ListPrint(struct ListNode *head) { ListNode *p; p=head; while(p!=NULL) { printf("%d ",p->val); p=p->next; } printf("\n"); } struct ListNode* reverseList(struct ListNode* head) { struct ListNode *p, *pre = NULL; while(head) { p = head->next; head->next = pre; pre = head; head = p; } return pre; } int main() { int n; scanf("%d",&n); ListNode * list=ListCreate(n); ListNode * result=reverseList(list); ListPrint(result); return 0; }

最新回复(0)