双指针迭代法
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
//双指针迭代法
struct ListNode* p=NULL;
struct ListNode* q=NULL;
//q为下一个要指向的链表节点
//p为记录原链表的下一个节点,转换方向后避免丢失
while(pHead!=NULL)
{
p=pHead->next;
pHead->next=q;
q=pHead;
pHead=p;
}
return q;
}
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *p,*q=nullptr;
while(pHead!=nullptr)
{
p=pHead->next;
pHead->next=q;
q=pHead;
pHead=p;
}
return q;
}
};
头插法
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
//头插法
struct ListNode* H=malloc(sizeof(struct ListNode));
H->next=NULL;
struct ListNode* cur=pHead;
struct ListNode* q=NULL;
while(cur!=NULL)
{
q=cur;
cur=cur->next;
q->next=H->next;
H->next=q;
}
return H->next;
}
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *H=new ListNode(0);
ListNode *temp=nullptr;
ListNode *cur=pHead;
while(cur!=nullptr)
{
temp=cur;
cur=cur->next;
temp->next=H->next;
H->next=temp;
}
return H->next;
}
};