反转链表
今天给大家讲一下反转链表
如图这样的效果
我们有两种方法来解决这个问题
第一种:
递归:
1.我们让head.next.next=head;head.next=null;
2.第一次2->1
3.第二次3->2->1
…
以此类推逻辑比较简单
上代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode h=reverseList(head.next);
head.next.next=head;
head.next=null;
return h;
}
}
第二种:
我们新来一个头节点node采用头插法进行插入返回node.next;
假如我们创建一个node的值为-100
-100->1
-100->2->1
…
以此类推逻辑比较简单上代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return null;
}
ListNode root=new ListNode(100);
while(head!=null){
//如果是第一个节点
if(root.next==null){
root.next=head;
head=head.next;
root.next.next=null;
//如果不是第一个节点
}else{
ListNode node=root.next;
root.next=head;
head=head.next;
root.next.next=null;
root.next.next=node;
}
}
return root.next;
}
}