剑指offer--面试题16:翻转链表--Java实现
2015-06-15 21:36
549 查看
题目描述:
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
解题思路:
为了反转列表,其实就是为了改变next指针,由指向后一个变为指向前一个。
这里为了避免链表断裂,要保存三个结点,即当前结点,前一个结点和后一个结点。
代码:
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
解题思路:
为了反转列表,其实就是为了改变next指针,由指向后一个变为指向前一个。
这里为了避免链表断裂,要保存三个结点,即当前结点,前一个结点和后一个结点。
代码:
public class ReverseListTest { static class ListNode { int key; ListNode next; } public static ListNode reverse(ListNode pHead) { ListNode reverseHead = pHead; ListNode node = pHead; ListNode prevNode = null; while (node != null) { ListNode next = node.next; if (next == null) { reverseHead = node; } node.next = prevNode; prevNode = node; node = next; } return reverseHead; } public static void main(String[] args) { // 建立一个测试链表 ListNode head = new ListNode(); head.key = 0; ListNode p = head; for (int i = 1; i < 10; i++) { ListNode node = new ListNode(); node.key = i; node.next = null; p.next = node; p = node; } ListNode pNode = reverse(head); while(pNode != null){ System.out.println(pNode.key); pNode = pNode.next; } } }
相关文章推荐
- (转)黑马程序员 ---- 博客格式
- 黑马程序员---2015.6.15java基础笔记---extends---final---interface
- “老"程序员如何能保证自己一直立于不败之地?
- “好程序员笔记”关于对象的比较以及一个二叉树的实现
- 黑马程序员----反射
- 程序员的自嘲
- 程序员要有持续产出
- 【好程序员笔记分享】—— 通过指针遍历一维数组
- 黑马程序员——Java基础---多线程的概述
- 黑马程序员——Java基础---多态,内部内和包的概述
- 怎么面试架构师
- 黑马程序员——Java基础---继承和抽象
- 入门程序员在开发过程中遇到的困难
- 黑马程序员——Java基础---数组
- 黑马程序员——Java基础之函数与数组
- 黑马程序员--结构体知识总结
- 常见前端面试题之HTML/CSS部分
- 反省自己!我将来可是要做一个生活家程序员的男人!
- 黑马程序员--面向对象--1st day
- 黑马程序员_面向对象