题目
输入一个链表,反转链表后,输出新链表的表头。
思路
1.将链表转为数组,数组反转,将反转后的数组赋值给新链表
2.反转链表中的箭头指向
代码
思路1
/*
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||head.next==null)
{
return head;
}
ListNode[] result=new ListNode[1000000];
ListNode[] result1=new ListNode[1000000];
int sum=0;
while(head!=null)
{
result[sum]=head;
head=head.next;
sum++;//sum最后等于链表长度,但是数组从0开始,所以判断时应该是k>sum,而不是k>sum+1
}
int i=0;
ListNode head1=new ListNode(0);
ListNode head2=head1;
for(i=0;i<sum;i++)
{
head1.val=result[sum-1-i].val;
if(i!=sum-1)
{
head1.next=new ListNode(0);
}
head1=head1.next;
}
return head2;
}
}
思路2
/*
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||head.next==null)
{
return head;
}
ListNode temp=null;
ListNode temp1=null;
while(head!=null)
{
temp=head.next;
head.next=temp1;
temp1=head;
head=temp;
}
return temp1;
}
}
但是思路2如果while里面条件改成head.next!=null
返回head的话是最后一个节点,不成链
返回temp1的话是缺少反转前最后一个节点的链,因为head.next!=null在最后一个节点时不满足条件,不会执行{}内的代码,所以还是用head!=null