一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
一起来学点算法,这里是慢慢学算法,我是小coder,昨天我们学习了合并数组,今天我们依旧来玩玩链表,链表也是面试常考的数据结构,我们今天来玩206题,这是一道简单题,我们来实现一下。
这里简单介绍一下单链表:单链表只有一个next指针域和数据域,next指针指向node.next为正,反过来是node.next=node。
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
示例 1:
示例 2:
输入: head = [1,2]
输出: [2,1]
题目分析
给定一个链表完成链表反转,很简单,只要改变指向的顺序即可,本题为单链表,所以只需修改next指向即可,将next指向指向上一个,原来是1的下一个是2.现在变成1的下一个是空,2的下一个变成1,依次类推。
解题思路
- 确定操作对象:本题中,操作对象为单链表
- 确定操作条件:操作条件为遍历链表中所有元素。
- 确定操作过程:操作过程为:取出下一个节点,将节点下一个指向置为上一个,然后要修改last变为当前,作为下一个节点的上一个节点,修改head,为当前节点的下一个节点,等循环结束。
- 确定结果返回:返回上一个节点
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode last =null;
while(head !=null){
ListNode nextNode= head.next;
head.next=last;
last=head;
head=nextNode;
}
return last;
}
}
题目总结
这道题目是一道简单题,有助于考察我们对链表数据结构的理解。
你们学会了吗?