链表是很重要的数据结构,许多都依赖于链表构建。比如哈希表开放链表构建法等。作为如此重要的数据结构,链表是面试笔试的重要考核点。这里,就对几个经典的链表算法笔试题做一个归纳汇总。
1. 反转链表
这是一个简单题,对于熟悉链表的人来说很简单。对于不懂的人来说就是一个拦路虎。话不多说,上leetcode原题。
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* curr = NULL;
struct ListNode* prev = head;
struct ListNode* temp = NULL;
while (prev) {
temp = prev->next;
prev->next = curr;
curr = prev;
prev = temp;
}
return curr;
}
怎么理解呢?
这是初始的正向链表。