场景描述
原题描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
C语言实现
思路
思路1:迭代的方法。画个图就较为容易理解了。设立两个指针prev,current,分别指向当前的结点和它前一个结点(若它没有前驱则指向空),交换prev,next所指向结点的指针域即可。
思路2:递归实现。日后详叙。🙃
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* current = head;
struct ListNode* tmp = NULL;
while(current) {
tmp = current->next;
current->next = prev;
prev = current;
current = tmp;
}
return prev;
}
Java语言实现
代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode current = head;
ListNode tmp = null;
while(current!=null){
tmp = current.next;
current.next = prev;
prev = current;
current = tmp;
}
return prev;
}
}