每日刷算法--劍指offer從尾到頭打印鏈表

每日刷算法--劍指offer
題目描述

輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。

分析:鏈表倒置有兩種思路,第一種是可以從修改節點的next屬性進行倒置,第二種可以把節點放在棧中,然後從棧頂開始取出即可實現倒置的效果
代碼:
第一種:


  struct ListNode {
        int val;
       struct ListNode *next;
        ListNode(int x) :
              val(x), next(NULL) {
        }
  }

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        	vector<int> vects;
	if (head == NULL)
		return vects;
	ListNode* q = head;    // q從上一個節點指向本節點
	ListNode* h = head->next;  //p指向節點的後一個節點
	ListNode* tempNode;  //臨時節點
	while (h != NULL) {
		tempNode = h->next;
		h->next = q;
		q = h;
		h = tempNode;
	}
	head->next = NULL;
	head = q;
	while (head != NULL) {
		vects.push_back(head->val);
		head = head->next;
	}
	return vects;
    }
};

第二種:

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
    vector<int> vects;  //利用兩個vector構造棧
	vector<int> vectnew;
	if (head == NULL)
		return vects;
	ListNode* h = head;
	while (h != NULL) {
		vects.push_back(h->val);
		h = h->next;
	}
	for (int  i =0; i < vects.size(); i--)   //循環 vects.size()-1 次
	{
		vectnew.push_back(vects.back());  //從後往前取元素
		vects.pop_back();                     //刪除取過的元素
	}
	 
	return vectnew;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章