//上课讲了之后自己写的
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head){
ListNode* n1,*n2,*n3;
//先判空·
if(head==NULL)
return head;
n1=NULL;
n2=head;
n3=head->next;
while(n2)//n2为反转的那个节点
{
n2->next=n1;
n1=n2;
n2=n3;
if(n3)//防止走到链表后面出现访问空指针的next
n3=n3->next;
}
return n1;//n1会走到最后一个节点
}
//思路一:迭代,三指针
class Solution {
public ListNode reverseList(ListNode head) {
//链表为空或者只有一个节点
if (head == null || head.next == null) {
return head;
}
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
//思路二:递归
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}