- /**
- * @author luochengcheng
- * 定义一个单链表
- */
- class Node {
- //变量
- private int record;
- //指向下一个对象
- private Node nextNode;
- public Node(int record) {
- super();
- this.record = record;
- }
- public int getRecord() {
- return record;
- }
- public void setRecord(int record) {
- this.record = record;
- }
- public Node getNextNode() {
- return nextNode;
- }
- public void setNextNode(Node nextNode) {
- this.nextNode = nextNode;
- }
- }
- /**
- * @author luochengcheng
- * 两种方式实现单链表的反转(递归、普通)
- * 新手强烈建议旁边拿着纸和笔跟着代码画图(便于理解)
- */
- public class ReverseSingleList {
- /**
- * 递归,在反转当前节点之前先反转后续节点
- */
- public static Node reverse(Node head) {
- if (null == head || null == head.getNextNode()) {
- return head;
- }
- Node reversedHead = reverse(head.getNextNode());
- head.getNextNode().setNextNode(head);
- head.setNextNode(null);
- return reversedHead;
- }
- /**
- * 遍历,将当前节点的下一个节点缓存后更改当前节点指针
- *
- */
- public static Node reverse2(Node head) {
- if (null == head) {
- return head;
- }
- Node pre = head;
- Node cur = head.getNextNode();
- Node next;
- while (null != cur) {
- next = cur.getNextNode();
- cur.setNextNode(pre);
- pre = cur;
- cur = next;
- }
- //将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head
- head.setNextNode(null);
- head = pre;
- return head;
- }
- public static void main(String[] args) {
- Node head = new Node(0);
- Node tmp = null;
- Node cur = null;
- // 构造一个长度为10的链表,保存头节点对象head
- for (int i = 1; i < 10; i++) {
- tmp = new Node(i);
- if (1 == i) {
- head.setNextNode(tmp);
- } else {
- cur.setNextNode(tmp);
- }
- cur = tmp;
- }
- //打印反转前的链表
- Node h = head;
- while (null != h) {
- System.out.print(h.getRecord() + " ");
- h = h.getNextNode();
- }
- //调用反转方法
- head = reverse2(head);
- System.out.println("\n**************************");
- //打印反转后的结果
- while (null != head) {
- System.out.print(head.getRecord() + " ");
- head = head.getNextNode();
- }
- }
- }
两种方法反转单链表
转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
SpringBoot优雅捕捉异常的两种方法
SpringBoot优雅捕捉异常的两种方法
SpringBoot 异常处理 @ControllerAdvice @ExceptionHandler -
单链表逆序有哪几种方法
单链表逆序
链表 递归 Data -
反转链表两种方法
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
链表 数据结构 java 递归 空指针 -
两种方法(递归,非递归)实现单链表的逆转
用普通方法和递归的方法实现单链表的逆置
C 单链表 链表 递归 头结点 -
leetcode 链表求和 两种方法 迭代和递归
面试题 02.05. 链表求和https://leetcode-cn.com/problems/sum-lists-lcci/给
链表 LeetCode 链表相加 数位 返回结果