Reverse a singly linked list.java
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
複製代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val; // 數據域
* ListNode *next; //指針域
* ListNode(int x) : val(x), next(NULL) {} //構造函數
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *new_head = NULL; //指向新鏈表頭結點的指針
while (head){
ListNode *next = head->next;// 備份head->next
head->next = new_head;//更新head->next
new_head = head;// 移動new_head
head=next; // 遍歷鏈表
}
return new_head;
}
};
複製代碼
在遍歷列表時,將當前節點的 next 指針改成指向前一個元素。因爲節點沒有引用其上一個節點,所以必須事先存儲其前一個元素。在更改引用以前,還須要另外一個指針來存儲下一個節點。不要忘記在最後返回新的頭引用!bash
/**
* 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 curr =head;
while (curr!=null){
ListNode nextTemp = curr.next;
curr.next = prev;
prev=curr;
curr=nextTemp; // 遍歷鏈表
}
return prev;
}
}
複製代碼