写在前面
最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
目录
- 写在前面
- 一、场景描述
- 二、具体步骤
- 1.环境说明
- 2.代码
- 写在后面
一、场景描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例:
输入:1->2->3
输出:3>2>1
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.2 |
2.代码
以下为Java版本实现:
public class Lc206_reverseList {public static void main(String[] args) {ListNode n3 = new ListNode(3);ListNode n2 = new ListNode(2, n3);ListNode head = new ListNode(1, n2);ListNode.print(head);System.out.println();ListNode.print(reverseList(head));}/*** n** 反转链表** 思路:* 1-> 2-> 3* 把2指向1,把3指向2... 这是一个循环的过程** 链表的循环一定有一个 curr 用来移动,要想改变链的方向* 还需要知道前一个节点(和curr用于改变链的方向)* 后一个节点(用于循环curr)** 定义 3个指针 pre、curr、next* pre = null, curr = head, next;** 遍历 while(curr != null) 为 next赋值 next = curr.next* curr.next = pre 改变链的方向(原来curr.next 指向的 next = curr.next)* 往后移动 pre = curr; curr = curr** 最后返回头,就是 pre** @param head* @return*/private static ListNode reverseList(ListNode head) {ListNode pre = null, curr = head, next;while (curr != null) {next = curr.next;// 改变链方向curr.next = pre;// 向后移动pre = curr;curr = next;}return pre;}static class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}public static void print(ListNode head) {while (head != null) {if (head.next == null) {System.out.print(head.val);} else {System.out.print(head.val + ", ");}head = head.next;}}}}
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。