给定一个链表进行反转
1->2->3->4->null
null->4->3->2->1
双指针法
public ListNode reverseList2(ListNode head){
ListNode pre=null;
ListNode cur=head;
ListNode temp;
while (cur!=null){
temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp;
}
return pre;
}
尾插法
public ListNode reverseList(ListNode head) {
ListNode dummy=new ListNode(-100);
dummy.next=head; //dummy模拟带头结点的链表
if (dummy.next==null||dummy.next.next==null){
//只有一个节点或者没有节点
return head;
}
ListNode temp=dummy.next;
while (temp.next!=null){
temp=temp.next; //找到尾结点
}
ListNode last=temp;
while (dummy.next!=last) {
//相当于尾插法,一直往尾部插入头元素
ListNode p=dummy.next;
dummy.next=p.next;
p.next=last.next;
last.next=p;
}
return dummy.next;
}