Leetcode-c++
链表
反转链表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* reverseList=NULL;
while(head!=NULL){
ListNode* temp=head->next;
head->next=reverseList;
reverseList=head;
head=temp;
}
return reverseList;
}
};
思路:首先定义一个链表reverseList,作为反转链表的头节点,然后进入循环挨个提取head链表的节点插入到reverseList链表中,插入的过程是首先定义一个链表保存当前head之后的链表,然后让head指向reverseList,然后将head赋给reverseList,最后将head重新指向原来的head.next。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
stack<int>s;
while(head!=NULL){
s.push(head->val);
head=head->next;
}
vector<int>v;
int size=s.size();
for(int i=0;i<size;i++){
v.push_back(s.top());
s.pop();
}
return v;
}
};
思路:定义一个栈,将head链表的数据加入栈中,再挨个取出栈顶元素放入vector中