剑指Offer-题16 反转链表(Java)
2015-04-13 16:15
387 查看
问题描述:定义一个函数,输入一个链表的头结点,反转该链表并输出翻转后链表的头结点;
问题分析:为避免反转时,当前节点的next指针指向前驱lastNode,而无法继续索引其后继nextNode,故在遍历过程中,注意要同时记录其前驱与后继;
同时注意鲁棒性:如输入链表头指针为null或者只有一个节点的情况;
代码:
/*public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//为避免发生断裂,要注意记录一个Node的前驱及后继
ListNode lastNode = null;
ListNode nextNode = null;
ListNode revHead = null;//翻转后的头节点
while(head != null)
{
nextNode = head.next;
head.next = lastNode;
//确定翻转后的首节点
if(nextNode == null)
revHead = head;
lastNode = head;
head = nextNode;
}
return revHead;
}
}
问题分析:为避免反转时,当前节点的next指针指向前驱lastNode,而无法继续索引其后继nextNode,故在遍历过程中,注意要同时记录其前驱与后继;
同时注意鲁棒性:如输入链表头指针为null或者只有一个节点的情况;
代码:
/*public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//为避免发生断裂,要注意记录一个Node的前驱及后继
ListNode lastNode = null;
ListNode nextNode = null;
ListNode revHead = null;//翻转后的头节点
while(head != null)
{
nextNode = head.next;
head.next = lastNode;
//确定翻转后的首节点
if(nextNode == null)
revHead = head;
lastNode = head;
head = nextNode;
}
return revHead;
}
}
相关文章推荐
- 【剑指offer-Java版】16反转链表
- 剑指offer 面试题16 反转链表-Java实现
- 剑指Offer面试题16(Java版):反转链表
- 剑指offer-chapter3-面试题16-反转链表(java)
- 剑指Offer:面试题16——反转链表(java实现)
- 【剑指offer】面试题16:反转链表
- 剑指offer-面试题16-反转链表
- 剑指offer-16:反转链表
- 剑指Offer---面试题16:反转链表
- 剑指offer-16.反转链表
- 剑指offer-面试题16-反转链表
- 剑指Offer----面试题16:反转链表
- 剑指offer-题16:反转链表
- 【剑指Offer学习】【面试题16 :反转链表】
- 【面试题】剑指Offer-16-反转链表
- 剑指Offer 16 反转链表
- 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
- 剑指Offer之面试题16:反转链表
- 16链表的反转|剑指offer
- 剑指offer面试题16 反转链表