定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
具体代码实现如下:
/**
* 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 temp = null;
ListNode pre = null;
ListNode cur = head;
while(cur != null){
temp = cur.next;// 先将cur的下一个节点寄存在temp节点中
cur.next = pre;// 改变cur的指向,让其指向前一个结点
pre = cur;// 更新pre的值,即将pre后移
cur = temp;// 更新cur的值,即将cur后移
}
return pre;
/*借助辅助栈解决问题
if(head == null) return null;
Stack<Integer> st = new Stack<>();
while(head != null){
st.push(head.val);
head = head.next;
}
ListNode rhead = new ListNode(st.pop());
ListNode res = rhead;
while(st.size() != 0){
rhead.next = new ListNode(st.pop());
rhead = rhead.next;
}
return res;
*/
}
}
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。