前提:
Node定义和链表的定义,参见文章Java 单链表操作
【解题思路】:
三个指针 :pBefore pCurrent(即将改变next方向的指针),pNext 三个指针
public Node inverseLinkList(Node pHead) {
// TODO Auto-generated method stub
Node inverseNode=null;
Node pCurrent=pHead;
Node pBefore=null;
Node pNext=null;
if(pCurrent==null||pCurrent.next==null)
return pHead;//验证链表只有一个节点和链表为空
while(pCurrent!=null){
pNext=pCurrent.next;
if(pNext==null)
inverseNode=pCurrent;
pCurrent.next=pBefore;
pBefore=pCurrent;
pCurrent=pNext;
}
//改变链表的首尾指针,
tail=head;
head=inverseNode;
//改变链表的首尾的值
return inverseNode;
}
}
方法二:迭代方法:
</pre><pre name="code" class="java">public Node inverseLinkList_Recursively(Node pNode){
//Node pNode=pHead;
Node pBefore=null;
Node pNext=null;
Node reverseNode=null;
if(pNode==null)
return pNode;
if(pNode.next!=null)
{
pNext=pNode.next;
if(pNext==null)
reverseNode=pNode;
pBefore=inverseLinkList_Recursively(pNode);
pNode.next=pBefore;
pBefore=pNode;
pNode=pNext;
}
return reverseNode;
}
测试代码:
MyLinkList linklist3=new MyLinkList();
linklist3.addFirst(3);
linklist3.add(2, 4);
linklist3.add(3, 5);
linklist3.add(3, 6);
linklist3.print(linklist3.head);
Node newHead=linklist3.inverseLinkList(linklist3.head);
//改变linklist3.head处值为null 测试空指针
linklist3.print(newHead);
运行结果:
the elements in the list :
3 4 5 6
the elements in the list :
6 5 4 3