反转链表
思路1:把第一个链表头插到一个新链表
思路2:创建3个指针,
n1,n2,n3
,在原链表上就可以修改指针的指向(不需要创建新的链表)
思路2代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {
//处理空链表
if(head == NULL){
return head;
}
//创建3个指针
ListNode* n1, *n2, *n3;
n1 = NULL;n2 = head;n3 = n2->next;
while(n2){
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3){
n3 = n3->next;
}
}
//此时的n1就是链表反转后新的头节点
return n1;
}