JAVA实现链表的反转(《剑指offer》)
2017-05-03 16:08
399 查看
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
在解决问题前,先想好测试用例:
1、功能测试:输入的链表含有多个结点,链表中只有一个结点
2、特殊输入测试:头结点为 NULL指针
解决这个问题有两种方式:
前提:
这两种方式 是以 头结点并不是第一个数据节点 为基准 表示的。
这种方式,头结点并不保存链表的结点数据,其数据位只保存链表结点总数。
在输出链表时,从头结点后的第一个数据结点开始输出,并不输出头结点。
方法:
1、头插法:将头结点后的链中结点 从前向后一个个断开,并依次以头插法插入在头结点后,这样也相当于完成了链表的反转,链表的头结点依然是原头结点。
2、逆转指针:即书上所阐述的方法。这种方法比较直观,将每个结点的指向翻转过来,原来指向后一结点的,现在指向前一个结点。
对于第二种方法,可以对照下图来理解:
图中阐述了一般情况下,即在链表中间,反转一个结点的步骤。其他结点反转的方式相同。
[java] view
plain copy
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution
{
public ListNode ReverseList(ListNode head) {
if(head==null)
return null;
ListNode newHead = null;
ListNode pNode = head;
ListNode pPrev = null;
while(pNode!=null){
ListNode pNext = pNode.next;
if(pNext==null)
newHead = pNode;
pNode.next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return newHead;
}
}
在解决问题前,先想好测试用例:
1、功能测试:输入的链表含有多个结点,链表中只有一个结点
2、特殊输入测试:头结点为 NULL指针
解决这个问题有两种方式:
前提:
这两种方式 是以 头结点并不是第一个数据节点 为基准 表示的。
这种方式,头结点并不保存链表的结点数据,其数据位只保存链表结点总数。
在输出链表时,从头结点后的第一个数据结点开始输出,并不输出头结点。
方法:
1、头插法:将头结点后的链中结点 从前向后一个个断开,并依次以头插法插入在头结点后,这样也相当于完成了链表的反转,链表的头结点依然是原头结点。
2、逆转指针:即书上所阐述的方法。这种方法比较直观,将每个结点的指向翻转过来,原来指向后一结点的,现在指向前一个结点。
对于第二种方法,可以对照下图来理解:
图中阐述了一般情况下,即在链表中间,反转一个结点的步骤。其他结点反转的方式相同。
[java] view
plain copy
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution
{
public ListNode ReverseList(ListNode head) {
if(head==null)
return null;
ListNode newHead = null;
ListNode pNode = head;
ListNode pPrev = null;
while(pNode!=null){
ListNode pNext = pNode.next;
if(pNext==null)
newHead = pNode;
pNode.next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return newHead;
}
}
相关文章推荐
- 《剑指offer》编程题java实现(十三):反转链表
- JAVA实现链表的反转(《剑指offer》)
- 链表问题之链表反转<Java实现>
- Java中单链表的实现和单链表的反转(倒置)
- JAVA实现从尾到头打印链表(《剑指offer》)
- java实现链表反转
- 用java实现反转链表
- JAVA实现单向链表反转2
- java实现链表反转
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)
- 反转链表 - java和rust的不同实现
- java实现单链表反转(递归方式)
- 反转链表_Java实现
- Java实现单链表反转
- Java中单链表的实现和单链表的反转(倒置)
- java 使用头插法实现反转链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 链表、反转链表操作,Java实现
- java 实现反转链表
- JAVA实现合并两个排序的链表(《剑指offer》)