Leetcode算法题

反转链表                                                   

 

反转一个单链表。

 

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

解法1:迭代,重复某一过程,每一次处理结果作为下一次处理的初始值,这些初始值类似于状态、每次处理都会改变状态、直至到达最终状态

从前往后遍历链表,将当前节点的next指向上一个节点,因此需要一个变量存储上一个节点prev,当前节点处理完需要寻找下一个节点,因此需要一个变量保存当前节点curr,处理完后要将当前节点赋值给 prev,并将next指针赋值给curr,因此需要一个变量提前保存下一个节点的指针next

 

  1. 将下一个节点指针保存到next变量 next = curr.next
  2. 将下一个节点的指针指向prev,curr.next = prev
  3. 准备处理下一个节点,将curr赋值给prev
  4. 将下一个节点赋值为curr,处理一个节点

 

解法2:递归:以相似的方法重复,类似于树结构,先从根节点找到叶子节点,从叶子节点开始遍历大的问题(整个链表反转)拆成性质相同的小问题(两个元素反转)curr.next.next = curr 将所有的小问题解决,大问题即解决

 

只需每个元素都执行curr.next.next = curr,curr.next = null两个步骤即可为了保证链不断,必须从最后一个元素开始

 

package com.cennavi;

public class ReverseList {

	static class ListNode {

		int val;  //链表的值

		ListNode next; //下一个节点

		public ListNode(int val, ListNode next) {

			this.val = val; // 链表的值

			this.next = next;

		}

	}

	public static ListNode iterate(ListNode head) {

		ListNode prev = null, curr, next;

		curr = head;

		while (curr != null) {

			next = curr.next;

			curr.next = prev;

			prev = curr;

			curr = next;

		}

		return prev;

	}

	public static ListNode recursion(ListNode head) {

		if (head == null || head.next == null) {

			return head;

		}

		ListNode newHead = recursion(head.next);

		head.next.next = head;

		head.next = null;

		return newHead;

	}

	public static void main(String[] args) {

		ListNode node5 = new ListNode(5, null);

		ListNode node4 = new ListNode(4, node5);

		ListNode node3 = new ListNode(3, node4);

		ListNode node2 = new ListNode(2, node3);

		ListNode node1 = new ListNode(1, node2);

//ListNode node = iterate(node1);

		ListNode node_1 = recursion(node1);

		System.out.println(node_1);

	}

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值