单向链表反转

来源:互联网 发布:移民澳大利亚知乎 编辑:程序博客网 时间:2024/04/28 08:52

如何将一个单向链表反转?

这是很多IT公司笔试面试常考察的一个基本数据结构题目。

上周的面摩根IT还被问过了这道题目,不过当时我写的不好。

这里重新梳理一下。


不多说了,从定义数据结构开始吧。

typedef struct ListNode{int val;ListNode* next;}ListNode;


1. 非递归方法

传统的一个思路是用三个指针:一个指针指向新链表的头节点(newListHead),一个指针指向当前正在处理的节点(curNode),另一个一个指针指向原来链表的剩余部分的头节点(nextHead)。然后遍历链表。

ListNode* reverseList{ListNode *head}{if(head == NULL || head->next == NULL){return head;}ListNode *newListHead = NULL;ListNode *curNode = head;ListNode *nextHead = NULL;while(curNode != NULL){nextHead = curNode->next; curNode->next = newListHead;newListHead = curNode;curNode = nextHead;}}


0 0
原创粉丝点击