题目描述:
思路:如果在原链表修改–双指针。如果不在原链表修改–用栈先入后出的特点创建新的链表;或遍历链表用头插法建立新链表。
双指针:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null)return null;
ListNode pre=null;
ListNode cur=head;
while(cur!=null){
ListNode nex=cur.next;
cur.next=pre;
pre=cur;
cur=nex;
}
return pre;
}
}
栈:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null)return null;
Deque<Integer> deque =new LinkedList();
ListNode tem=head;
while(tem!=null){
deque.push(tem.val);
tem=tem.next;
}
ListNode result=new ListNode(deque.pop());
tem=result;
while(!deque.isEmpty()){
tem.next=new ListNode(deque.pop());
tem=tem.next;
}
return result;
}
}