java 链表反转_LeetCode206 实现单链表的反转

LeetCode206 实现单链表的反转

LeetCode 码,码不停题

84f5e7d1f05a65d58d5cd6c10f03500b.png

1.题目介绍

Reverse a singly linked list.

Example:

Input:1->2->3->4->5->NULL

Output:5->4->3->2->1->NULL

2.实现方式

就地反转法

新建链表,头节点插入法

递归反转法

3.代码实现

不啰嗦,直接看代码实现,本文代码主要采用java编写

单链表实现欢迎参考文章https://blog.csdn.net/u014229347/article/details/88966409)

/** * 实现单链表的反转(LeetCode206) * * @author llspace * @since 2019-06-28 */public class SingleLinkedListReverse { public static void main(String[] args) { SingleLinkedList singleLinkedList = new SingleLinkedList<>(); singleLinkedList.addHead(1); for(int i = 2; i < 6; i++){ singleLinkedList.addNode(i, i-1); } singleLinkedList.print(); //测试单链表反转 //singleLinkedList = reverse(singleLinkedList); //singleLinkedList = reverse1(singleLinkedList); singleLinkedList = reverse2(singleLinkedList); singleLinkedList.print(); } /** * 就地反转法 * * @param input * @return */ public static SingleLinkedList reverse(SingleLinkedList input){ SingleLinkedList.Node head = input.getHead(); SingleLinkedList.Node next = head.next; while(next != null){ input.addHead(next.value); head.next = next.next; next = next.next; } return input; } /** * 新建链表,头节点插入法 * * @param input * @return */ public static SingleLinkedList reverse1(SingleLinkedList input){ SingleLinkedList output = new SingleLinkedList<>(); SingleLinkedList.Node head = input.getHead(); while(head != null){ output.addHead(head.value); head = head.next; } return output; } /** * 递归反转法 * * @param input * @return */ public static SingleLinkedList reverse2(SingleLinkedList input){ input.setHead(reverseNode(input.getHead())); return input; } public static SingleLinkedList.Node reverseNode(SingleLinkedList.Node head){ if(head == null || head.next == null) { return head; } SingleLinkedList.Node node = reverseNode(head.next); head.next.next = head; head.next = null; return node; }}

好了今天就码到这了,欢迎感兴趣的朋友们一起交流!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值