前言
- 因为大一学习链表时草草了事,对于链表的一些算法题做得非常的少,因而在大二上学期这段时间学习数据结构时,链表-树-图的基础知识越来越差,更不用说做树、图的算法题了。所以在上周完成iOS方向的一个项目后,这段自由支配的时间我选择用来重新巩固基础,毕竟以后不论实习还是工作面试还是会考算法的。
- 以下挑了这个周做的一些链表基础但很重要的题目
LeetCode 206. 反转链表
- 方法一:迭代法
在遍历链表时,将当前节点的
next
指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* p = NULL;
struct ListNode* cur = head;
if (!cur) {
return head;
}
while (cur) {
struct ListNode* pNext = cur->next;
cur->next = p;
p = cur;
cur = pNext;
}
return p