您的位置:首页 > 其它

Reverse Linked List+链表复习

2016-05-03 23:33 288 查看
这个题感觉很简单,但是实际做还是花了一些功夫。顺带着回顾一下链表

1、创建链表

<pre name="code" class="html">struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
int main(){
ListNode* head=new ListNode(0); //创建第一个链表节点
<span style="white-space:pre">	</span>ListNode* key = head;  //标记链表头的位置
<span style="white-space:pre">	</span>int i;
<span style="white-space:pre">	</span>for (i = 1; i < 5; i++){
<span style="white-space:pre">		</span>ListNode* key = new ListNode(i);//创建链表节点
<span style="white-space:pre">		</span>head->next = key;
<span style="white-space:pre">		</span>head = key;
<span style="white-space:pre">	</span>}
}


2、遍历链表
while (head!= NULL){
cout << head->val << endl;  //输出链表内容
head = head->next;
}


leetcode题目:翻转一个单向链表

class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *key1;
ListNode *key2;
ListNode *key3;
if (head == NULL||head->next==NULL){
return head;
}
key1= head;
key3 = head;
while ((head->next)!= NULL){ //key2指向head当前地址,head指向其下一个地址。通过key2将当前节点指向上一个节点(key1指向)
key2 = head;
head = head->next;
key2->next = key1;
key1 = key2;
}
head->next = key1;//容易遗忘,因为循环条件,必须单独让最后的head指向上一个节点
key3->next = NULL;//同上,key3指向最初的head初始位置。反向后下一个地址指向NULL
return head;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: