题目:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
图示:
输入:
head = [1,2,3,4,5]
输出:
[5,4,3,2,1]
解题思路:
情况一:
只有一个节点或者没有节点 head->或 head=null;
if(head==null||head.next==null){
return head;
}
情况二:
多个节点
1.定义一个新头节点newHead=head.next,先定义一个cur=newHead.next(防止第三个节点丢失)
,再让newHEad.next指向head,head.next=null,从而实现:
2.一、二节点反转完毕,考虑后面的节点,如果没有第三个节点,直接返回newHead,否则
while(cur!=null){
ListNode tmp=cur.next;
cur.next=newHead;
newHead=cur;
cur=tmp;
}
return newHead;
3要连接二、三节点,需要暂时保存第四个节点的地址,创建tmp暂存,然后连接(如果没有4节点,将cur赋值给newHead,连接完后跳出循环,返回newHead),实现:
反转完毕,返回newHead,结束!!!!
代码展示:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
//定义一个新的头节点
ListNode newHead=head.next;
ListNode cur=newHead.next;
newHead.next=head;
head.next=null;
while(cur!=null){
ListNode tmp=cur.next;
cur.next=newHead;
newHead=cur;
cur=tmp;
}
return newHead;
}
}