反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
1.三指针法(方法实现)
/**
* 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 dummyHead = new ListNode(-1);
dummyHead.next = head;
if(head == null || head.next == null) {
return head;
}else {
ListNode f = dummyHead.next;
ListNode s = f.next;
while(s!=null) {
// 下一次迭代的位置
f.next = s.next;
s.next = dummyHead.next;
dummyHead.next = s;
s = f.next;
}
return dummyHead.next;
}
}
}
2.头插法(方法实现)
/**
* 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 fir = new ListNode(-1);
for(ListNode temp = head;temp != null;temp = temp.next){
ListNode newNode = new ListNode(temp.val);
newNode.next = fir.next;
fir.next = newNode;
}
return fir.next;
}
}