反转链表

tech2026-06-12  1

package ByteDance; /** * @author LZY * @version 1.0 * @date 2020/9/4 16:09 * https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=188&&tqId=35160&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking * 反转链表 */ public class ReverseList { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode ReverseList(ListNode head) { if(head==null||head.next==null){ return head; } //第一个指针 指向空(翻转后的末尾节点),他是翻转后的链表的头结点 ListNode p1=null; //第二个指针 先指向head,用于将一个一个节点的next指向上一个节点(反序) ListNode p2=head; //第三个指针 先指向head.next,用于存储p2之后的链表,以来防止p2(前边已经翻转过的)和p3(后边未反转的)断开而暂时的存储 ListNode p3=head.next; //假如p2!=null那么就说明还有节点(p2)未翻转 while(p2!=null){ //反转第一步,使第2个节点的next指向第一个节点 p2.next=p1; //反转第二步,p1指针后移,获取反转后的头结点 p1=p2; //反转第三步,p2指针后移 p2=p3; if(p3!=null){ //反转第四步,p3指针后移 p3=p3.next; } } //返回翻转后的链表的头结点 return p1; } }
最新回复(0)