35翻轉鏈表

方法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;    

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章