您的位置:首页 > Web前端

剑指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;
}
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: