一、题目
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
二、解题思路
①遍历。将指向下一个节点的指针指向上一个节点。
②递归。先让指向下一个节点的指针为空,然后递归调用,最后再将指向下一个节点的指针指向上一个节点。
链表翻转:
递归
public Node reverseList(Node node){
if(node==null || node.next==null){
return node;
}else{
Node headNode=reverseList(node.next);
node.next.next=node;
node.next=null;
return headNode;
}
}
遍历
public Node reverseList(Node node){
Node preNode=null;
Node curNode=node;
Node headNode=null;
while(node!=null){
Node nextNode=node.next;
if(nextNode==null){
headNode=node;
}
curNode.next=preNode;
preNode=curNode;
curNode=nextNode;
}
return headNode;
}
LinkList反转
public LinkedList reverseList(LinkedList list){
LinkedList<Object> newList=new LinkedList<Object>();
for(Object object : newList){
newList.add(object);
}
return newList;
}