方法1:將單鏈表儲存爲數組,然後按照數組的索引逆序進行反轉。
方法2:使用三個指針遍歷單鏈表,逐個鏈接點進行反轉。
/**
* Definition of ListNode
*
* class ListNode {
* public:
* int val;
* ListNode *next;
*
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: The new head of reversed linked list.
*/
ListNode *reverse(ListNode *head) {
if(head==NULL||head->next==NULL)
{
return head;
}
ListNode*m=head;
ListNode*n=head->next;
ListNode*p;
head->next=NULL;
while(n)
{
p=n->next;
n->next=m;
m=n;
n=p;
}
head=m;
return head;// write your code here
}
};
方法3:從第2個節點到第N個節點,依次逐節點插入到第1個節點(head節點)之後,最後將第一個節點挪到新表的表尾。
ActList* ReverseList3(ActList* head)
{
ActList* p;
ActList* q;
p=head->next;
while(p->next!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head;//相當於成環
head=p->next->next;//新head變爲原head的next
p->next->next=NULL;//斷掉環
return head;
}